字符串類型
雖然叫字符串類型,但是里面也可以由數字。
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可以設置一個鍵值對,用mset可以一次設置多個鍵值對,用mget可以一次獲取多個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字符串的長度
127.0.0.1:6379> strlen name
(integer) 5
127.0.0.1:6379> strlen age
(integer) 1
可以使用incr的decr將值加1或者減1,但需要注意的是只能用在整數類型中
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設置每次自增或者自減不是1而是一個指定的值
127.0.0.1:6379> incrby age 3
(integer) 13
127.0.0.1:6379> decrby age 3
(integer) 10
哈希類型
- redis的hash其實就是鍵值對的集合
- 每個hash中可以儲存2^32-1個鍵值對
使用hset和hget可以設置和獲取哈希類型鍵值對得值
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可以返回哈希中全部的鍵值對
127.0.0.1:6379> hgetall userinfo
1) "name"
2) "cx"
3) "age"
4) "20"
5) "addr"
6) "beijing"
使用hmset和hmget可以一次設置或者獲取多個key所對應的值。
127.0.0.1:6379> hmget userinfo name age
1) "cx"
2) "20"
可以使用keys *查看全部數據對象,使用del命令刪除鍵值對
127.0.0.1:6379> keys *
1) "name"
2) "userinfo"
127.0.0.1:6379> del name
注意:del是刪除的一個數據對象,比如執行 del userinfo命令會刪除整個userinfo哈希表,想要刪除哈希表中的某個鍵值對需要使用hdel userinfo name.
列表類型
- 列表中的元素是有順序的
- 列表中最多儲存2^32-1個鍵值對
- 列表的元素是從0開始的
- 列表其實是雙向的(左L 右R)
lpush可以將一個或者多個值插入到列表的首部(如果列表不存在,則創建列表)
127.0.0.1:6379> lpush citylist beijing shanghai guangzhou
(integer) 3
lrange可以顯示一個列表中的部分元素,在現實的是需要制定起始位置終止位置
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可以顯示列表末尾的一個元素,并將其從列表中刪除
127.0.0.1:6379> rpop citylist
"shenyang"
127.0.0.1:6379> lrange citylist 0 5
1) "guangzhou"
2) "shanghai"
3) "beijing"
lpop可以顯示列表首部的一個元素,并將其從列表中刪除。
llen可以返回列表長度
127.0.0.1:6379> llen citylist
(integer) 3
lrem可以刪除指定個數的元素,比如從前往后找,找到的前兩個qq
用正數指定個數:表示從前往后找
用負數指定個數:表示從后往前找
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 >>>刪除前兩個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 >>>刪除最后一個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可以修改某個下標得值,比如說把下標為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可以在指定的值前面或者后面插入新的數據,比如在360的后面添加一個元素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"
在生產環境中,列表使用還是比較廣泛的
很多時候都是從左邊添加數據,從右邊讀取數據,比如我們在緩存中緩存五個數據
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
會發現新添加的數據在最后面(最下面,最右邊)
127.0.0.1:6379> lrange list2 0 10
1) "q5"
2) "q4"
3) "q3"
4) "q2"
5) "q1"
那么在讀取數據的時候就可以從后讀
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"
這其實是一個生產者-消費者模型,也就是所謂的消息隊列,通常來說消息隊列會用在下訂單、用戶注冊場景中,比如一個用戶提交訂單了,這個訂單會首先保存在消息隊列中,那么這個時候即使數據庫還沒有寫入就宕機了,也是沒有問題的,在啟動以后,通過讀取消息隊列,就可以繼續執行了。
集合類型(set)
集合中會有比如交集、并集等這樣的概念。
sadd可以創建集合,這里我們再結合中添加三個元素
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可以判斷一個元素是否在集合中
127.0.0.1:6379> sismember myset sina
(integer) 1 >>>在集合中
127.0.0.1:6379> sismember myset qqa
(integer) 0 >>>不在集合中
我們在怎樣的場景中會用到交集呢?比如在好友列表中,既是你的好友也是我的好友那就會用到交集。
有序集合(sortdset)
ZADD key score member [[score member] [score member] …]
將一個或多個 member 元素及其 score 值加入到有序集 key 當中。
# 添加單個元素
127.0.0.1:6379> zadd sortdset1 10 qq
(integer) 1
# 添加多個元素
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 的基數
127.0.0.1:6379> zcard sortdset1
(integer) 4
ZCOUNT key min max
返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等于 min 或 max )的成員的數量。
127.0.0.1:6379> zcount sortdset1 5 10
(integer) 3 >>>有三個score值在5-10之間taobao的score是15不再這個之間
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 為底,也就是說, 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。
可以通過傳遞一個負數值 increment ,讓 score 減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
當 key 不存在,或 member 不是 key 的成員時, ZINCRBY key increment member 等同于 ZADD key increment member 。
當 key 不是有序集類型時,返回一個錯誤。
score 值可以是整數值或雙精度浮點數。
ZREM key member [member …]
移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。
當 key 存在但不是有序集類型時,返回一個錯誤。
ZREVRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定區間內的成員。
其中成員的位置按 score 值遞減(從大到小)來排列。
具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。
除了成員按 score 值遞減的次序排列這一點外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。
總結
以上是生活随笔為你收集整理的Redis的数据类型详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。