redis教程:
概述
redis
是一種支持分布式的nosql
數(shù)據(jù)庫(kù),他的數(shù)據(jù)是保存在內(nèi)存中习寸,同時(shí)redis
可以定時(shí)把內(nèi)存數(shù)據(jù)同步到磁盤胶惰,即可以將數(shù)據(jù)持久化,并且他比memcached
支持更多的數(shù)據(jù)結(jié)構(gòu)(string
,list列表[隊(duì)列和棧]
,set[集合]
,sorted set[有序集合]
,hash(hash表)
)。相關(guān)參考文檔:http://redisdoc.com/index.html
redis使用場(chǎng)景:
- 登錄會(huì)話存儲(chǔ):存儲(chǔ)在
redis
中匿级,與memcached
相比,數(shù)據(jù)不會(huì)丟失。 - 排行版/計(jì)數(shù)器:比如一些秀場(chǎng)類的項(xiàng)目散庶,經(jīng)常會(huì)有一些前多少名的主播排名。還有一些文章閱讀量的技術(shù),或者新浪微博的點(diǎn)贊數(shù)等乐疆。
- 作為消息隊(duì)列:比如
celery
就是使用redis
作為中間人。 - 當(dāng)前在線人數(shù):還是之前的秀場(chǎng)例子,會(huì)顯示當(dāng)前系統(tǒng)有多少在線人數(shù)。
- 一些常用的數(shù)據(jù)緩存:比如我們的
BBS
論壇诉字,板塊不會(huì)經(jīng)常變化的,但是每次訪問首頁(yè)都要從mysql
中獲取撩匕,可以在redis
中緩存起來,不用每次請(qǐng)求數(shù)據(jù)庫(kù)。 - 把前200篇文章緩存或者評(píng)論緩存:一般用戶瀏覽網(wǎng)站卤妒,只會(huì)瀏覽前面一部分文章或者評(píng)論,那么可以把前面200篇文章和對(duì)應(yīng)的評(píng)論緩存起來。用戶訪問超過的阱洪,就訪問數(shù)據(jù)庫(kù)承璃,并且以后文章超過200篇,則把之前的文章刪除。
- 好友關(guān)系:微博的好友關(guān)系使用
redis
實(shí)現(xiàn)。 - 發(fā)布和訂閱功能:可以用來做聊天軟件垮斯。
redis
和memcached
的比較:
memcached | redis | |
---|---|---|
類型 | 純內(nèi)存數(shù)據(jù)庫(kù) | 內(nèi)存磁盤同步數(shù)據(jù)庫(kù) |
數(shù)據(jù)類型 | 在定義value時(shí)就要固定數(shù)據(jù)類型 | 不需要 |
虛擬內(nèi)存 | 不支持 | 支持 |
過期策略 | 支持 | 支持 |
存儲(chǔ)數(shù)據(jù)安全 | 不支持 | 可以將數(shù)據(jù)同步到dump.db中 |
災(zāi)難恢復(fù) | 不支持 | 可以將磁盤中的數(shù)據(jù)恢復(fù)到內(nèi)存中 |
分布式 | 支持 | 主從同步 |
訂閱與發(fā)布 | 不支持 | 支持 |
redis
在ubuntu
系統(tǒng)中的安裝與啟動(dòng)
-
安裝:
sudo apt-get install redis-server
-
卸載:
sudo apt-get purge --auto-remove redis-server
-
啟動(dòng):
redis
安裝后,默認(rèn)會(huì)自動(dòng)啟動(dòng),可以通過以下命令查看:ps aux|grep redis
如果想自己手動(dòng)啟動(dòng),可以通過以下命令進(jìn)行啟動(dòng):
sudo service redis-server start
-
停止:
sudo service redis-server stop
redis在windows系統(tǒng)中的安裝與啟動(dòng):
- 下載:redis官方是不支持windows操作系統(tǒng)的较沪。但是微軟的開源部門將redis移植到了windows上。因此下載地址不是在redis官網(wǎng)上。而是在github上:https://github.com/MicrosoftArchive/redis/releases贴见。
- 安裝:點(diǎn)擊一頓下一步安裝就可以了。
- 運(yùn)行:進(jìn)入到
redis
安裝所在的路徑然后執(zhí)行redis-server.exe redis.windows.conf
就可以運(yùn)行了。 - 連接:
redis
和mysql
以及mongo
是一樣的辖所,都提供了一個(gè)客戶端進(jìn)行連接典挑。輸入命令redis-cli
(前提是redis安裝路徑已經(jīng)加入到環(huán)境變量中了)就可以連接到redis
服務(wù)器了。
其他機(jī)器訪問本機(jī)redis服務(wù)器:
想要讓其他機(jī)器訪問本機(jī)的redis服務(wù)器倒庵。那么要修改redis.conf的配置文件浑玛,將bind改成bind [自己的ip地址或者0.0.0.0]
,其他機(jī)器才能訪問。
注意:bind綁定的是本機(jī)網(wǎng)卡的ip地址,而不是想讓其他機(jī)器連接的ip地址髓迎。如果有多塊網(wǎng)卡橄维,那么可以綁定多個(gè)網(wǎng)卡的ip地址。如果綁定到額是0.0.0.0,那么意味著其他機(jī)器可以通過本機(jī)所有的ip地址進(jìn)行訪問。
對(duì)redis
的操作
對(duì)redis
的操作可以用兩種方式,第一種方式采用redis-cli
,第二種方式采用編程語言,比如Python
阎肝、PHP
和JAVA
等嫉父。
使用
redis-cli
對(duì)redis
進(jìn)行字符串操作:-
啟動(dòng)
redis
:sudo service redis-server start
-
連接上
redis-server
:
redis-cli -h [ip] -p [端口]
-
添加:
set key value 如: set username xiaotuo
將字符串值
value
關(guān)聯(lián)到key
。如果key
已經(jīng)持有其他值,set
命令就覆寫舊值涉茧,無視其類型惑淳。并且默認(rèn)的過期時(shí)間是永久,即永遠(yuǎn)不會(huì)過期肠套。 -
刪除:
del key 如: del username
-
設(shè)置過期時(shí)間:
expire key timeout(單位為秒)
也可以在設(shè)置值的時(shí)候,一同指定過期時(shí)間:
set key value EX timeout 或: setex key timeout value
-
查看過期時(shí)間:
ttl key 如: ttl username
-
查看當(dāng)前
redis
中的所有key
:keys *
-
列表操作:
-
在列表左邊添加元素:
lpush key value
將值
value
插入到列表key
的表頭。如果key
不存在轿钠,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行lpush
操作硫朦。當(dāng)key
存在但不是列表類型時(shí)泽裳,將返回一個(gè)錯(cuò)誤。 -
在列表右邊添加元素:
rpush key value
將值value插入到列表key的表尾嚎朽。如果key不存在锅很,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行RPUSH操作。當(dāng)key存在但不是列表類型時(shí)褐奥,返回一個(gè)錯(cuò)誤。
-
查看列表中的元素:
lrange key start stop
返回列表
key
中指定區(qū)間內(nèi)的元素驼鹅,區(qū)間以偏移量start
和stop
指定,如果要左邊的第一個(gè)到最后的一個(gè)lrange key 0 -1
碉咆。 -
移除列表中的元素:
-
移除并返回列表
key
的頭元素:
lpop key
-
移除并返回列表的尾元素:
rpop key
-
移除并返回列表
key
的中間元素:lrem key count value
將刪除
key
這個(gè)列表中,count
個(gè)值為value
的元素谓厘。
-
-
指定返回第幾個(gè)元素:
lindex key index
將返回
key
這個(gè)列表中幌羞,索引為index
的這個(gè)元素。 -
獲取列表中的元素個(gè)數(shù):
llen key 如: llen languages
-
刪除指定的元素:
lrem key count value 如: lrem languages 0 php
根據(jù)參數(shù) count 的值竟稳,移除列表中與參數(shù) value 相等的元素属桦。
count
的值可以是以下幾種:- count > 0:從表頭開始向表尾搜索,移除與
value
相等的元素他爸,數(shù)量為count
聂宾。 - count < 0:從表尾開始向表頭搜索,移除與
value
相等的元素诊笤,數(shù)量為count
的絕對(duì)值系谐。 - 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
-
查看集合中的元素個(gè)數(shù):
scard set 如: scard team1
-
獲取多個(gè)集合的交集:
sinter set1 set2 如: sinter team1 team2
-
獲取多個(gè)集合的并集:
sunion set1 set2 如: sunion team1 team2
-
獲取多個(gè)集合的差集:
sdiff set1 set2 如: sdiff team1 team2
-
-
hash
哈希操作:-
添加一個(gè)新值:
hset key field value 如: hset website baidu baidu.com
將哈希表
key
中的域field
的值設(shè)為value
盏混。
如果key
不存在蔚鸥,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行HSET
操作。如果域field
已經(jīng)存在于哈希表中许赃,舊值將被覆蓋止喷。 -
獲取哈希中的
field
對(duì)應(yīng)的值:hget key field 如: hget website baidu
-
刪除
field
中的某個(gè)field
:hdel key field 如: hdel website baidu
-
獲取某個(gè)哈希中所有的
field
和value
:hgetall key 如: hgetall website
-
獲取某個(gè)哈希中所有的
field
:hkeys key 如: hkeys website
-
獲取某個(gè)哈希中所有的值:
hvals key 如: hvals website
-
判斷哈希中是否存在某個(gè)
field
:hexists key field 如: hexists website baidu
-
獲取哈希中總共的鍵值對(duì):
hlen field 如: hlen website
-
-
事務(wù)操作:Redis事務(wù)可以一次執(zhí)行多個(gè)命令,事務(wù)具有以下特征:
隔離操作:事務(wù)中的所有命令都會(huì)序列化混聊、按順序地執(zhí)行弹谁,不會(huì)被其他命令打擾。
原子操作:事務(wù)中的命令要么全部被執(zhí)行句喜,要么全部都不執(zhí)行预愤。
-
開啟一個(gè)事務(wù):
multi
以后執(zhí)行的所有命令,都在這個(gè)事務(wù)中執(zhí)行的咳胃。
-
執(zhí)行事務(wù):
exec
會(huì)將在
multi
和exec
中的操作一并提交植康。 -
取消事務(wù):
discard
會(huì)將
multi
后的所有命令取消。 -
監(jiān)視一個(gè)或者多個(gè)
key
:watch key...
監(jiān)視一個(gè)(或多個(gè))key展懈,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key被其他命令所改動(dòng)销睁,那么事務(wù)將被打斷。
-
取消所有
key
的監(jiān)視:unwatch
-
發(fā)布/訂閱操作:
-
給某個(gè)頻道發(fā)布消息:
publish channel message
-
訂閱某個(gè)頻道的消息:
subscribe channel
-