一、數(shù)據(jù)類型
1.有哪些類型
Redis是Key-Value型數(shù)據(jù)庫(kù),Key只有一種類型,字符串。Value的數(shù)據(jù)類型比較豐富,考慮來(lái)應(yīng)用場(chǎng)合和使用場(chǎng)景,高效利用內(nèi)存等因素,總共設(shè)計(jì)了5種類型:string, hash, list, set和zset。
2.string類型
string可以存儲(chǔ)任何數(shù)據(jù),一條string的記錄最大1G。
常用操作:
(1)set key value
設(shè)置key對(duì)應(yīng)string類型的value,返回1表示成功,返回0表示失敗。
如果key不存在,則插入一條新的記錄,如果key存在則更新此記錄。
(2)setnx key value
與set基本功能相同,區(qū)別在于如果key存在,則不會(huì)執(zhí)行命令。
(3)mset key1 value1 key2 value2 ...
批量設(shè)置多個(gè)key的string類型的value,只要其中任何一個(gè)key value設(shè)置成功就返回1,全部執(zhí)行不成功則返回0。
(4)msetnx key1 value1 key2 value2 ...
與mset基本功能相同,區(qū)別在于如果批量操作中某些key已經(jīng)存在,則不會(huì)更新這些key對(duì)應(yīng)的value。
(5)get key
獲取key對(duì)應(yīng)的string類型的value,如果key不存在返回nil。
(6)mget key1 key2 ...
批量獲取
(7)getset key value
先獲取值再進(jìn)行更新。如果key不存在返回nil。
(8)incr key
對(duì)key對(duì)應(yīng)的value進(jìn)行自增操作,key對(duì)應(yīng)的value必須是一個(gè)整數(shù),如果key不存在,則設(shè)置key值為1。
(9)incrby key integer
對(duì)key對(duì)應(yīng)的value進(jìn)行自增integer數(shù)值
(10)decr key
對(duì)key對(duì)應(yīng)的value進(jìn)行自減操作,key對(duì)應(yīng)的value必須是一個(gè)整數(shù),如果key不存在,則設(shè)置key值為-1。
(11)decrby key integer
對(duì)key對(duì)應(yīng)的value進(jìn)行自減integer數(shù)值
3.hash類型
hash類型是由多個(gè)string類型的key value對(duì)組成的映射表。
hash類型相對(duì)多個(gè)string類型key value對(duì)存儲(chǔ)的優(yōu)點(diǎn):
將一個(gè)對(duì)象存儲(chǔ)在hash類型中占用更少的內(nèi)存(集中存儲(chǔ)),并且可以方便的對(duì)整個(gè)對(duì)方進(jìn)行存取。
常用操作:
(1)hset key field value
設(shè)置key對(duì)應(yīng)的hash的字段field的值value。
(2)hmset key field value field value field value ...
批量設(shè)置key對(duì)應(yīng)的hash的多個(gè)字段field的值value。
(3)hget key field
獲取key對(duì)應(yīng)的hash中指定的字段field的值
(4)hmget key field1 field2 field3 ...
批量獲取key對(duì)應(yīng)的hash中多個(gè)字段的值
(5)hkeys key
得到key對(duì)應(yīng)的hash的所有字段
(6)hvals key
得到key對(duì)應(yīng)的hash的所有value
(7)hgetall key
得到key對(duì)應(yīng)的hash的所有field和value
(8)hlen key
得到key對(duì)應(yīng)的hash的字段個(gè)數(shù)。
(9)hincrby key field integer
將指定的hash field加上指定的值 。成功返回hash field變更后的值。
(10)hexists key field
判斷key對(duì)應(yīng)的hash指定的字段是否存在。
(11)hdel key field
刪除key對(duì)應(yīng)的hash指定字段。
4.list類型
list類型是一個(gè)鏈表結(jié)構(gòu),是一個(gè)由string類型元素組成的雙向鏈表。
主要操作就是push,pop,range等。
雙向鏈表分左右,左為表頭,右為表尾,可以雙向進(jìn)行操作,快速查詢到鏈表中任一元素。
常用操作:
(1)lpush key value
在key對(duì)應(yīng)的list的頭部添加元素。
(2)rpush key value
在key對(duì)應(yīng)的list的尾部添加元素。
(3)lpop key
從list的頭部刪除并返回刪除的元素。
(4)rpop key
從list的尾部刪除并返回刪除的元素。
(5)blpop key1 key2... timeout
在timeout(超時(shí)時(shí)間,以秒為單位)時(shí)間內(nèi),從頭到尾掃描,返回對(duì)第一個(gè)非空l(shuí)ist進(jìn)行l(wèi)pop操作的結(jié)果,并返回刪除的元素。
(6)brpop key1 key2... timeout
與blpop類似,方向不同,從尾到頭掃描。
(7)llen key
返回key對(duì)應(yīng)的list的元素個(gè)數(shù)。
(8)lrange key start end
返回指定區(qū)間內(nèi)的元素,下標(biāo)從0開始,負(fù)值表示逆向,即-1表示倒數(shù)第一個(gè)元素。
(9)ltrim key start end
截取list指定區(qū)間內(nèi)的元素。
(10)lset key index value
更新指定下標(biāo)的元素值。
(11)lrem key count value
從List的頭部(count>0時(shí))或尾部(count<0時(shí))開始,刪除count個(gè)等于value值的元素,返回刪除的數(shù)量,count為0時(shí)表示刪除全部等于value值的元素。
5.set類型
set是無(wú)序排重的,最大可包含2的32次方-1個(gè)元素。redis的set是通過(guò)hash table實(shí)現(xiàn)的。
set可以進(jìn)行交集、并集、差集運(yùn)算,可以應(yīng)用在求共同好友、blog的tag功能等場(chǎng)景。
常用操作:
(1)sadd key member
添加一個(gè)string類型的元素到key對(duì)應(yīng)的set集合中。
(2)srem key member
刪除指定元素。
(3)spop key
隨機(jī)刪除set中的一個(gè)元素,并返回這個(gè)元素。
(4)smove sourcekey distkey member
從sourcekey對(duì)應(yīng)的set中轉(zhuǎn)移member對(duì)應(yīng)的元素到diskey對(duì)應(yīng)的set中。
(5)scard key
返回set中元素的個(gè)數(shù)
(6)sismember key member
判斷member是否在set中。
(7)srandmember key
與spop類似,隨機(jī)取得一個(gè)元素,但不刪除這個(gè)元素。
(8)smembers key
得到集合中所有元素
(9)sinter key1 key2 ...
返回多個(gè)set集合的交集
(10)sinterstore distkey key1 key2 ...
返加key1 key2等多個(gè)set的交集,并存儲(chǔ)在distkey對(duì)應(yīng)的set中。
(12)sunion key1 key2 ...
返回多個(gè)set集合的并集
(13)sunionstore distkey key1 key2 ...
返加key1 key2等多個(gè)set的并集,并存儲(chǔ)在distkey對(duì)應(yīng)的set中。
(14)sdiff key1 key2 ...
返回多個(gè)set集合的差集,差集運(yùn)算有順序性,操作的key順序不同,運(yùn)算結(jié)果不同。
(15)sdiffstore distkey key1 key2 ...
返加key1 key2等多個(gè)set的差集,并存儲(chǔ)在distkey對(duì)應(yīng)的set中。
6.zset類型
zset即sorted set,有序集合,是在set的基礎(chǔ)上為每個(gè)元素添加一個(gè)score屬性,集合中的元素根據(jù)score大小進(jìn)行排序。任何時(shí)候,zset都是有序的。
每次添加進(jìn)一個(gè)新的元素或者集合中的元素的score發(fā)生變更時(shí),zset會(huì)自動(dòng)根據(jù)score重新排序。
常用操作:
(1)zadd key score1 member1 score2 member2...
添加元素到集合,元素如果存在,則更新對(duì)應(yīng)的score
(2)zrem key member
刪除指定元素,只刪除一個(gè)
(3)zincrby key incr member
增加對(duì)應(yīng)member的score,加完后元素會(huì)進(jìn)行移動(dòng),以保證整個(gè)集合的有序性。
(4)zremrangebyrank key min max
對(duì)排名在min與max之間的元素進(jìn)行刪除
(5)zremrangebyscore key min max
按score進(jìn)行區(qū)間刪除
(6)zrank key member
返回指定元素在集合中的排名(下標(biāo),以0開始),集合中元素是按score從小到大升序的。
(7)zrevrank key member
返回降序排名
(8)zrange key start end
返回集合中指定區(qū)間的元素(升序)
(9)zrevrange key start end
返回集合中指定區(qū)間的元素(降序)
(10)zrangebyscore key min max
返回score在min到max之間的元素
(11)zcount key min max
返回集合中score在給定區(qū)間的數(shù)量
(12)zcard key
返回集合中元素的個(gè)數(shù)
(13)zscore key element
返回集合中指定元素的分?jǐn)?shù)
二、對(duì)key進(jìn)行操作
- 對(duì)key常用的操作有:
(1)exists key
判斷指定key是否存在
(2)del key1 key2 ...
刪除給定key,返回刪除的數(shù)目,0表示給定key都不存在
(3)type key
返回給定key對(duì)應(yīng)value的數(shù)據(jù)類型
(4)keys pattern
返回匹配指定模式的所有key,比如 keys user* 表示返回以u(píng)ser開頭的所有key
(5)randomkey
隨機(jī)返回當(dāng)前數(shù)據(jù)庫(kù)中一個(gè)key
(6)rename oldkey newkey
重命名一個(gè)key,如果newkey存在,將會(huì)進(jìn)行覆蓋
(7)renamenx oldkey newkey
重命名一個(gè)key,如果newkey存在,則不執(zhí)行命令(不會(huì)覆蓋)
(8)expire key seconds
為key指定過(guò)期時(shí)間
(9)ttl key
返回key的剩余過(guò)期時(shí)間,以秒為單位,<0表示key不存在或者已經(jīng)過(guò)期。
(10)select db-index
切換數(shù)據(jù)庫(kù)
(11)move key db-index
將key從當(dāng)前數(shù)據(jù)庫(kù)移動(dòng)到指定數(shù)據(jù)庫(kù)
三、常用管理命令
1. redis-cli交互式客戶端
運(yùn)行redis的bin目錄下的redis-cli命令,進(jìn)入交互式命令行
redis-cli -h 127.0.0.1 -p 6379 制定要連接的ip和端口號(hào)
redis-cli PING,ping redis的端口,看是否正常
redis-cli SHUTDOWN 關(guān)閉redis服務(wù)
2. 修改數(shù)據(jù)庫(kù)數(shù)量
一個(gè)redis實(shí)例默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),可以在redis的conf配置文件中進(jìn)行修改
databases 16
3.生成備份文件
關(guān)于數(shù)據(jù)持久化及備份策略,將在后面的教程中再深入探討。此處只列出幾個(gè)常用的命令:
(1)save
保存數(shù)據(jù)到硬盤dump.rdb備份文件中,會(huì)堵塞主進(jìn)程
(2)bgsave
以后臺(tái)進(jìn)程保存數(shù)據(jù)到硬盤dump.rdb備份文件,不會(huì)堵塞主進(jìn)程,常用
(3)shutdown save
安全關(guān)閉數(shù)據(jù)庫(kù),關(guān)閉前會(huì)先執(zhí)行save備份操作。
(4)bgrewriteaof
異步執(zhí)行重寫一個(gè)AOF文件操作
4. 獲取客戶端連接
client list
可以得到連接到服務(wù)器的所有客戶端
5. 結(jié)束客戶端連接
client kill ipaddr:port
ipaddr為客戶端IP,port為客戶端端口
6. 標(biāo)記當(dāng)前連接名
client setname name
為當(dāng)前連接設(shè)置一個(gè)name,區(qū)分與其他連接
7. 獲取服務(wù)器端統(tǒng)計(jì)信息
info [section]
section參數(shù)可省略,省略表示顯示所有信息
加上對(duì)應(yīng)的section可以顯示對(duì)應(yīng)分塊的統(tǒng)計(jì)信息,比如 info cpu得到服務(wù)器cpu使用情況, info replication得到replication復(fù)制方面的信息等等。
8. 清空數(shù)據(jù)
(1)flushdb
清空當(dāng)前數(shù)據(jù)庫(kù)所有key
(2)flushall
清空所有數(shù)據(jù)庫(kù)所有key
9. 熱修改Replication角色
(1)role
查詢當(dāng)前服務(wù)器的角色
(2)slaveof masterip:port
設(shè)置本實(shí)例為masterip:port服務(wù)器的從服務(wù)器
10.熱修改配置信息
(1)config get setting
獲取當(dāng)前setting對(duì)應(yīng)的配置的信息,比如config get timeout得到當(dāng)前配置的連接超時(shí)時(shí)間
(2)config set setting value
設(shè)置當(dāng)前setting對(duì)應(yīng)的配置的信息