redis新手入門教程:
概述
redis
是一種支援分散式的nosql
資料庫,他的資料是儲存在記憶體中,同時redis
可以定時把記憶體資料同步到磁碟,即可以將資料持久化,並且他比memcached
支援更多的資料結構(string
,list列表[佇列和棧]
,set[集合]
,sorted set[有序集合]
,hash(hash表)
)。Pycharm啟用碼教程使用更多解釋請見:http://vrg123.com
相關參考文件:http://redisdoc.com/index.html
redis使用場景:
- 登入會話儲存:儲存在
redis
中,與memcached
相比,資料不會丟失。 - 排行版/計數器:比如一些秀場類的專案,經常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。
- 作為訊息佇列:比如
celery
就是使用redis
作為中間人。 - 當前線上人數:還是之前的秀場例子,會顯示當前系統有多少線上人數。
- 一些常用的資料快取:比如我們的
BBS
論壇,板塊不會經常變化的,但是每次訪問首頁都要從mysql
中獲取,可以在redis
中快取起來,不用每次請求資料庫。 - 把前200篇文章快取或者評論快取:一般使用者瀏覽網站,只會瀏覽前面一部分文章或者評論,那麼可以把前面200篇文章和對應的評論快取起來。使用者訪問超過的,就訪問資料庫,並且以後文章超過200篇,則把之前的文章刪除。
- 好友關係:微博的好友關係使用
redis
實現。 - 釋出和訂閱功能:可以用來做聊天軟體。
redis
和memcached
的比較:
memcached | redis | |
---|---|---|
型別 | 純記憶體資料庫 | 記憶體磁碟同步資料庫 |
資料型別 | 在定義value時就要固定資料型別 | 不需要 |
虛擬記憶體 | 不支援 | 支援 |
過期策略 | 支援 | 支援 |
儲存資料安全 | 不支援 | 可以將資料同步到dump.db中 |
災難恢復 | 不支援 | 可以將磁碟中的資料恢復到記憶體中 |
分散式 | 支援 | 主從同步 |
訂閱與釋出 | 不支援 | 支援 |
redis
在ubuntu
系統中的安裝與啟動
- 安裝:
sudo apt-get install redis-server
- 解除安裝:
sudo apt-get purge --auto-remove redis-server
-
啟動:
redis
安裝後,預設會自動啟動,可以通過以下命令檢視:ps aux|grep redis
如果想自己手動啟動,可以通過以下命令進行啟動:
sudo service redis-server start
-
停止:
sudo service redis-server stop
redis在windows系統中的安裝與啟動:
- 下載:redis官方是不支援windows作業系統的。但是微軟的開源部門將redis移植到了windows上。因此下載地址不是在redis官網上。而是在github上:https://github.com/MicrosoftArchive/redis/releases。
- 安裝:點選一頓下一步安裝就可以了。
- 執行:進入到
redis
安裝所在的路徑然後執行redis-server.exe redis.windows.conf
就可以運行了。 - 連線:
redis
和mysql
以及mongo
是一樣的,都提供了一個客戶端進行連線。輸入命令redis-cli
(前提是redis安裝路徑已經加入到環境變數中了)就可以連線到redis
伺服器了。
其他機器訪問本機redis伺服器:
想要讓其他機器訪問本機的redis伺服器。那麼要修改redis.conf的配置檔案,將bind改成bind [自己的ip地址或者0.0.0.0]
,其他機器才能訪問。
注意:bind繫結的是本機網絡卡的ip地址,而不是想讓其他機器連線的ip地址。如果有多塊網絡卡,那麼可以繫結多個網絡卡的ip地址。如果繫結到額是0.0.0.0,那麼意味著其他機器可以通過本機所有的ip地址進行訪問。
對redis
的操作
對redis
的操作可以用兩種方式,第一種方式採用redis-cli
,第二種方式採用程式語言,比如Python
、PHP
和JAVA
等。
-
使用
redis-cli
對redis
進行字串操作: -
啟動
redis
:sudo service redis-server start
- 連線上
redis-server
:redis-cli -h [ip] -p [埠]
-
新增:
set key value 如: set username xiaotuo
將字串值
value
關聯到key
。如果key
已經持有其他值,set
命令就覆寫舊值,無視其型別。並且預設的過期時間是永久,即永遠不會過期。 -
刪除:
del key 如: del username
-
設定過期時間:
expire key timeout(單位為秒)
也可以在設定值的時候,一同指定過期時間:
set key value EX timeout 或: setex key timeout value
-
檢視過期時間:
ttl key 如: ttl username
-
檢視當前
redis
中的所有key
:keys *
-
列表操作:
-
在列表左邊新增元素:
lpush key value
將值
value
插入到列表key
的表頭。如果key
不存在,一個空列表會被建立並執行lpush
操作。當key
存在但不是列表型別時,將返回一個錯誤。 -
在列表右邊新增元素:
rpush key value
將值value插入到列表key的表尾。如果key不存在,一個空列表會被建立並執行RPUSH操作。當key存在但不是列表型別時,返回一個錯誤。
-
檢視列表中的元素:
lrange key start stop
返回列表
key
中指定區間內的元素,區間以偏移量start
和stop
指定,如果要左邊的第一個到最後的一個lrange key 0 -1
。 -
移除列表中的元素:
- 移除並返回列表
key
的頭元素:lpop key
- 移除並返回列表的尾元素:
rpop key
-
移除並返回列表
key
的中間元素:lrem key count value
將刪除
key
這個列表中,count
個值為value
的元素。
- 移除並返回列表
-
指定返回第幾個元素:
lindex key index
將返回
key
這個列表中,索引為index
的這個元素。 -
獲取列表中的元素個數:
llen key 如: llen languages
-
刪除指定的元素:
lrem key count value 如: lrem languages 0 php
根據引數 count 的值,移除列表中與引數 value 相等的元素。
count
的值可以是以下幾種:- count > 0:從表頭開始向表尾搜尋,移除與
value
相等的元素,數量為count
。 - count < 0:從表尾開始向表頭搜尋,移除與
value
相等的元素,數量為count
的絕對值。 - count = 0:移除表中所有與
value
相等的值。
- count > 0:從表頭開始向表尾搜尋,移除與
-
-
set
集合的操作:- 新增元素:
sadd set value1 value2.... 如: sadd team xiaotuo datuo
- 檢視元素:
smembers set 如: smembers team
- 移除元素:
srem set member... 如: srem team xiaotuo datuo
- 檢視集合中的元素個數:
scard set 如: scard team1
- 獲取多個集合的交集:
sinter set1 set2 如: sinter team1 team2
- 獲取多個集合的並集:
sunion set1 set2 如: sunion team1 team2
- 獲取多個集合的差集:
sdiff set1 set2 如: sdiff team1 team2
- 新增元素:
-
hash
雜湊操作:-
新增一個新值:
hset key field value 如: hset website baidu baidu.com
將雜湊表
key
中的域field
的值設為value
。
如果key
不存在,一個新的雜湊表被建立並進行HSET
操作。如果域field
已經存在於雜湊表中,舊值將被覆蓋。 -
獲取雜湊中的
field
對應的值:hget key field 如: hget website baidu
-
刪除
field
中的某個field
:hdel key field 如: hdel website baidu
-
獲取某個雜湊中所有的
field
和value
:hgetall key 如: hgetall website
-
獲取某個雜湊中所有的
field
:hkeys key 如: hkeys website
-
獲取某個雜湊中所有的值:
hvals key 如: hvals website
-
判斷雜湊中是否存在某個
field
:hexists key field 如: hexists website baidu
-
獲取雜湊中總共的鍵值對:
hlen field 如: hlen website
-
-
事務操作:Redis事務可以一次執行多個命令,事務具有以下特徵:
- 隔離操作:事務中的所有命令都會序列化、按順序地執行,不會被其他命令打擾。
- 原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
-
開啟一個事務:
multi
以後執行的所有命令,都在這個事務中執行的。
-
執行事務:
exec
會將在
multi
和exec
中的操作一併提交。 -
取消事務:
discard
會將
multi
後的所有命令取消。 -
監視一個或者多個
key
:watch key...
監視一個(或多個)key,如果在事務執行之前這個(或這些) key被其他命令所改動,那麼事務將被打斷。
-
取消所有
key
的監視:unwatch
-
釋出/訂閱操作:
- 給某個頻道釋出訊息:
publish channel message
- 訂閱某個頻道的訊息:
subscribe channel
- 給某個頻道釋出訊息: