字符串類(lèi)型
雖然叫字符串類(lèi)型,但是里面也可以由數(shù)字。
- 創(chuàng)建一個(gè)字符串類(lèi)型的key
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379> type name
string
string
127.0.0.1:6379> append name qq
(integer) 5
127.0.0.1:6379> get name
"tomqq"
用set可以設(shè)置一個(gè)鍵值對(duì),用mset可以一次設(shè)置多個(gè)鍵值對(duì),用mget可以一次獲取多個(gè)key的值
127.0.0.1:6379> mset name jerry age 2 addr hebei
OK
127.0.0.1:6379> mget name age addr
1) "jerry"
2) "2"
3) "hebei"
用strlen可以獲取key字符串的長(zhǎng)度
127.0.0.1:6379> strlen name
(integer) 5
127.0.0.1:6379> strlen age
(integer) 1
可以使用incr的decr將值加1或者減1,但需要注意的是只能用在整數(shù)類(lèi)型中
127.0.0.1:6379> set age 10
OK
127.0.0.1:6379> type age
string
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> decr age
(integer) 10
也可以使用incrby或decrby設(shè)置每次自增或者自減不是1而是一個(gè)指定的值
127.0.0.1:6379> incrby age 3
(integer) 13
127.0.0.1:6379> decrby age 3
(integer) 10
哈希類(lèi)型
- redis的hash其實(shí)就是鍵值對(duì)的集合
- 每個(gè)hash中可以儲(chǔ)存2^32-1個(gè)鍵值對(duì)
使用hset和hget可以設(shè)置和獲取哈希類(lèi)型鍵值對(duì)得值
127.0.0.1:6379> hset userinfo name cx
(integer) 1
127.0.0.1:6379> hset userinfo age 20
(integer) 1
127.0.0.1:6379> hset userinfo addr beijing
(integer) 1
127.0.0.1:6379> type userinfo
hash
127.0.0.1:6379> hget userinfo age
"20"
使用hgetall可以返回哈希中全部的鍵值對(duì)
127.0.0.1:6379> hgetall userinfo
1) "name"
2) "cx"
3) "age"
4) "20"
5) "addr"
6) "beijing"
使用hmset和hmget可以一次設(shè)置或者獲取多個(gè)key所對(duì)應(yīng)的值。
127.0.0.1:6379> hmget userinfo name age
1) "cx"
2) "20"
可以使用keys *查看全部數(shù)據(jù)對(duì)象,使用del命令刪除鍵值對(duì)
127.0.0.1:6379> keys *
1) "name"
2) "userinfo"
127.0.0.1:6379> del name
注意:del是刪除的一個(gè)數(shù)據(jù)對(duì)象,比如執(zhí)行 del userinfo命令會(huì)刪除整個(gè)userinfo哈希表,想要?jiǎng)h除哈希表中的某個(gè)鍵值對(duì)需要使用hdel userinfo name.
列表類(lèi)型
- 列表中的元素是有順序的
- 列表中最多儲(chǔ)存2^32-1個(gè)鍵值對(duì)
- 列表的元素是從0開(kāi)始的
- 列表其實(shí)是雙向的(左L 右R)
lpush可以將一個(gè)或者多個(gè)值插入到列表的首部(如果列表不存在,則創(chuàng)建列表)
127.0.0.1:6379> lpush citylist beijing shanghai guangzhou
(integer) 3
lrange可以顯示一個(gè)列表中的部分元素,在現(xiàn)實(shí)的是需要制定起始位置終止位置
127.0.0.1:6379> lrange citylist 0 2
1) "guangzhou"
2) "shanghai"
3) "beijing"
rpush可以在列表末尾追加元素
127.0.0.1:6379> rpush citylist shenyang
(integer) 4
127.0.0.1:6379> lrange citylist 0 5
1) "guangzhou"
2) "shanghai"
3) "beijing"
4) "shenyang"
rpop可以顯示列表末尾的一個(gè)元素,并將其從列表中刪除
127.0.0.1:6379> rpop citylist
"shenyang"
127.0.0.1:6379> lrange citylist 0 5
1) "guangzhou"
2) "shanghai"
3) "beijing"
lpop可以顯示列表首部的一個(gè)元素,并將其從列表中刪除。
llen可以返回列表長(zhǎng)度
127.0.0.1:6379> llen citylist
(integer) 3
lrem可以刪除指定個(gè)數(shù)的元素,比如從前往后找,找到的前兩個(gè)qq
用正數(shù)指定個(gè)數(shù):表示從前往后找
用負(fù)數(shù)指定個(gè)數(shù):表示從后往前找
127.0.0.1:6379> lpush list1 qq baidu taobao sina qq baidu qq taobao qq
(integer) 9
127.0.0.1:6379> lrange list1 0 10
1) "qq"
2) "taobao"
3) "qq"
4) "baidu"
5) "qq"
6) "sina"
7) "taobao"
8) "baidu"
9) "qq"
127.0.0.1:6379> lrem list1 2 qq >>>刪除前兩個(gè)qq
(integer) 2
127.0.0.1:6379> lrange list1 0 10
1) "taobao"
2) "baidu"
3) "qq"
4) "sina"
5) "taobao"
6) "baidu"
7) "qq"
127.0.0.1:6379> lrem list1 -1 baidu >>>刪除最后一個(gè)baidu
(integer) 1
127.0.0.1:6379> lrange list1 0 10
1) "taobao"
2) "baidu"
3) "qq"
4) "sina"
5) "taobao"
6) "qq"
127.0.0.1:6379> lrem list1 0 taobao >>>刪除所有的taobao
(integer) 2
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "qq"
3) "sina"
4) "qq"
lset可以修改某個(gè)下標(biāo)得值,比如說(shuō)把下標(biāo)為1的值改為360
127.0.0.1:6379> lset list1 1 360
OK
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "360"
3) "sina"
4) "qq"
linsert可以在指定的值前面或者后面插入新的數(shù)據(jù),比如在360的后面添加一個(gè)元素cx
127.0.0.1:6379> linsert list1 after 360 cx
(integer) 5
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "360"
3) "cx"
4) "sina"
5) "qq"
在生產(chǎn)環(huán)境中,列表使用還是比較廣泛的
很多時(shí)候都是從左邊添加數(shù)據(jù),從右邊讀取數(shù)據(jù),比如我們?cè)诰彺嬷芯彺嫖鍌€(gè)數(shù)據(jù)
127.0.0.1:6379> lpush list2 q1
(integer) 1
127.0.0.1:6379> lpush list2 q2
(integer) 2
127.0.0.1:6379> lpush list2 q3
(integer) 3
127.0.0.1:6379> lpush list2 q4
(integer) 4
127.0.0.1:6379> lpush list2 q5
(integer) 5
會(huì)發(fā)現(xiàn)新添加的數(shù)據(jù)在最后面(最下面,最右邊)
127.0.0.1:6379> lrange list2 0 10
1) "q5"
2) "q4"
3) "q3"
4) "q2"
5) "q1"
那么在讀取數(shù)據(jù)的時(shí)候就可以從后讀
127.0.0.1:6379> rpop list2
"q1"
127.0.0.1:6379> rpop list2
"q2"
127.0.0.1:6379> rpop list2
"q3"
127.0.0.1:6379> rpop list2
"q4"
127.0.0.1:6379> rpop list2
"q5"
這其實(shí)是一個(gè)生產(chǎn)者-消費(fèi)者模型,也就是所謂的消息隊(duì)列,通常來(lái)說(shuō)消息隊(duì)列會(huì)用在下訂單、用戶注冊(cè)場(chǎng)景中,比如一個(gè)用戶提交訂單了,這個(gè)訂單會(huì)首先保存在消息隊(duì)列中,那么這個(gè)時(shí)候即使數(shù)據(jù)庫(kù)還沒(méi)有寫(xiě)入就宕機(jī)了,也是沒(méi)有問(wèn)題的,在啟動(dòng)以后,通過(guò)讀取消息隊(duì)列,就可以繼續(xù)執(zhí)行了。
集合類(lèi)型(set)
集合中會(huì)有比如交集、并集等這樣的概念。
sadd可以創(chuàng)建集合,這里我們?cè)俳Y(jié)合中添加三個(gè)元素
127.0.0.1:6379> sadd myset qq
(integer) 1
127.0.0.1:6379> sadd myset baidu
(integer) 1
127.0.0.1:6379> sadd myset sina
smembers可以獲取集合中的全部元素
127.0.0.1:6379> smembers myset
1) "baidu"
2) "qq"
3) "sina"
sismember可以判斷一個(gè)元素是否在集合中
127.0.0.1:6379> sismember myset sina
(integer) 1 >>>在集合中
127.0.0.1:6379> sismember myset qqa
(integer) 0 >>>不在集合中
我們?cè)谠鯓拥膱?chǎng)景中會(huì)用到交集呢?比如在好友列表中,既是你的好友也是我的好友那就會(huì)用到交集。
有序集合(sortdset)
ZADD key score member [[score member] [score member] …]
將一個(gè)或多個(gè) member 元素及其 score 值加入到有序集 key 當(dāng)中。
# 添加單個(gè)元素
127.0.0.1:6379> zadd sortdset1 10 qq
(integer) 1
# 添加多個(gè)元素
127.0.0.1:6379> zadd sortdset1 7 baidu 8 sina 15 taobao
(integer) 3
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
有序集成員按 score 值遞增(從小到大)次序排列。
127.0.0.1:6379> zrange salary 0 100 withscores
1) "baidu"
2) "7"
3) "sina"
4) "8"
5) "qq"
6) "10"
7) "taobao"
8) "15"
ZCARD key
返回有序集 key 的基數(shù)
127.0.0.1:6379> zcard sortdset1
(integer) 4
ZCOUNT key min max
返回有序集 key 中, score 值在 min 和 max 之間(默認(rèn)包括 score 值等于 min 或 max )的成員的數(shù)量。
127.0.0.1:6379> zcount sortdset1 5 10
(integer) 3 >>>有三個(gè)score值在5-10之間taobao的score是15不再這個(gè)之間
ZSCORE key member
返回有序集 key 中,成員 member 的 score 值。
如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil
127.0.0.1:6379> zscore salary baidu
"7"
ZRANK key member
返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。
排名以 0 為底,也就是說(shuō), score 值最小的成員排名為 0 。
使用 ZREVRANK 命令可以獲得成員按 score 值遞減(從大到小)排列的排名。
127.0.0.1:6379> zrank salary baidu
(integer) 0 >>>baidu排名第一
127.0.0.1:6379> zrank salary qq
(integer) 2 >>>qq排名第三
ZINCRBY key increment member
為有序集 key 的成員 member 的 score 值加上增量 increment。
可以通過(guò)傳遞一個(gè)負(fù)數(shù)值 increment ,讓 score 減去相應(yīng)的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
當(dāng) key 不存在,或 member 不是 key 的成員時(shí), ZINCRBY key increment member 等同于 ZADD key increment member 。
當(dāng) key 不是有序集類(lèi)型時(shí),返回一個(gè)錯(cuò)誤。
score 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。
ZREM key member [member …]
移除有序集 key 中的一個(gè)或多個(gè)成員,不存在的成員將被忽略。
當(dāng) key 存在但不是有序集類(lèi)型時(shí),返回一個(gè)錯(cuò)誤。
ZREVRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定區(qū)間內(nèi)的成員。
其中成員的位置按 score 值遞減(從大到小)來(lái)排列。
具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。
除了成員按 score 值遞減的次序排列這一點(diǎn)外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。
總結(jié)
以上是生活随笔為你收集整理的Redis的数据类型详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。