天天看點

Redis的資料類型詳解

作者:IT邦德
中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計
(Web\java\Python)工作,主要服務于生産制造
現擁有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)認證
分布式TBase\TDSQL資料庫、國産達夢資料庫以及紅帽子認證
從業8年DBA工作,在資料庫領域有豐富的經驗


擅長Oracle資料庫運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。      
Redis的資料類型詳解

文章目錄

  • ​​1. Redis 鍵(key)​​
  • ​​2 String​​
  • ​​3.List​​
  • ​​4.Set​​
  • ​​5.Hash(哈希)​​
  • ​​6.Zset(有序集合)​​

1. Redis 鍵(key)

序号  指令及描述
1  DEL key該指令用于在 key 存在時删除 key。
2  DUMP key序列化給定 key ,并傳回被序列化的值。
3  EXISTS key檢查給定 key 是否存在。
4  EXPIRE key seconds為給定 key 設定過期時間,以秒計。
5  PEXPIRE key milliseconds設定 key 的過期時間以毫秒計。
6  KEYS pattern查找所有符合給定模式( pattern)的 key 。
7  MOVE key db将目前資料庫的 key 移動到給定的資料庫 db 當中。
8  PERSIST key移除 key 的過期時間,key 将持久保持。
9  PTTL key以毫秒為機關傳回 key 的剩餘的過期時間。
10  TTL key以秒為機關,傳回給定 key 的剩餘生存時間(TTL, time to live)。
13  RANDOMKEY從目前資料庫中随機傳回一個 key 。
11  RENAME key newkey修改 key 的名稱
12  RENAMENX key newkey僅當 newkey 不存在時,将 key 改名為 newkey 。
13  SCAN cursor [MATCH pattern] [COUNT count]疊代資料庫中的資料庫鍵。
14  TYPE key傳回 key 所儲存的值的類型。

#判斷是否存在
exists name
#逾時過期,機關是秒
expire name 10
#檢視過期時間
ttl name
#移除目前的key
move name 1
#檢視目前key的類型
type      

2 String

#追加字元串,沒有的話就建立
append name "jeames"
#字元串長度
strlen name
#i++
set count 0
incr count
#i--
decr count
#指定增量 count = count + 10
incrby count 10
#指定減量 count = count - 10
decrby count 10
#截取字元串 wangqin
getrange key 0 3
"wang"
#替換
setrange key 1 qq
"wqqgqin"
#設定過期時間
setex key 30 "hello"
#不存在再設定,往往在分布式中使用,如果key1不存在就建立,存在就建立失敗
setnx key1 "redis"
#批量設定
mset k1 v1 k2 v2 k3 v3
#批量擷取
mget k1 k2
#要麼一起成功,要麼一起失敗,保持原子性
msetnx k1 v1 k2 v2
#先擷取在寫入,不存在值為nil,存在的話擷取原來的值在設定新的值      

3.List

#将一個值或者多個值插入list的頭部
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
#檢視list,頭->尾
127.0.0.1:6379> lrange list 0 -1
2.3 Set
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right
(integer) 4
#将一個值或者多個值插入list的尾部
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
#移除list第一個元素
127.0.0.1:6379> lpop list
"three"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
#移除list最後一個元素
127.0.0.1:6379> rpop list
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
#根據下标擷取值
127.0.0.1:6379> lindex list 0
#擷取list長度
127.0.0.1:6379> llen list
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "two"
4) "one"
#從上至下删除一個 two
127.0.0.1:6379> lrem list 1 two
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>      

4.Set

#添加Set元素
127.0.0.1:6379> sadd myset v1 v2 v3 v4
(integer) 4
#顯示所有myset集合中的元素
127.0.0.1:6379> smembers myset
1) "v1"
2) "v3"
3) "v4"
4) "v2"

#查詢v1是否存在myset集合中,存在就傳回1,不存在就傳回0
127.0.0.1:6379> sismember myset v1
(integer) 1
127.0.0.1:6379> sismember myset v6
(integer) 0
127.0.0.1:6379> sadd uset k1 k2 k3 v1
(integer) 4
#合并集合myset和uset到集合set中,set重複的取一個就行
127.0.0.1:6379> sunionstore set myset uset
(integer) 7
#合并顯示集合myset和uset
127.0.0.1:6379> sunion myset uset
1) "v1"
2) "v3"
3) "k1"
4) "k3"
5) "v4"
6) "k2"
7) "v2"
#set集合的長度
127.0.0.1:6379> scard set
(integer) 6
#随機删除set中的元素
127.0.0.1:6379> spop set
"v4"
#移動指定的一個值到其他的集合中set->myset
127.0.0.1:6379> smove set myset k1
#兩個集合的差集
127.0.0.1:6379> smembers set
1) "v3"
2) "k3"
3) "k2"
4) "v2"
127.0.0.1:6379> smembers myset
1) "v1"
2) "v3"
3) "v4"
4) "v2"
5) "k1"
127.0.0.1:6379> sdiff myset set
1) "v1"
2) "k1"
3) "v4"
#兩個集合的交集
127.0.0.1:6379> sinter myset set
1) "v3"
2) "v2"
#兩個集合的并集
127.0.0.1:6379> sunion myset set
1) "v1"
2) "v3"
3) "k1"
4) "k3"
5) "v4"
6) "k2"
7) "v2"      

5.Hash(哈希)

#set一個具體的 key-value
127.0.0.1:6379> hset myhash name jeames
(integer) 1
#擷取一個字段值
127.0.0.1:6379> hget myhash name
"wangqin"
#set一組 key-value
127.0.0.1:6379> hmset myhash name wangqin1 age 18
OK
#擷取一組 key-value
127.0.0.1:6379> hmget myhash name age
1) "wangqin1"
2) "18"
#擷取全部資料
127.0.0.1:6379> hgetall myhash
1) "name"
2) "wangqin1"
3) "age"
4) "18"
#删除指定的key
127.0.0.1:6379> hdel myhash name
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
127.0.0.1:6379> hmset myhash name wangqin set male
OK
#擷取hash表的字段數量
127.0.0.1:6379> hlen myhash
(integer) 3
#hash表中是否存在key
127.0.0.1:6379> hexists myhash name
(integer) 1
127.0.0.1:6379> hexists myhash name1
(integer) 0
#擷取hash表的key
127.0.0.1:6379> hkeys myhash
1) "age"
2) "name"
3) "set"
#擷取hash表的值
127.0.0.1:6379> hvals myhash
1) "18"
2) "wangqin"
3) "male"      

6.Zset(有序集合)

#添加zset元素
127.0.0.1:6379> zadd zset 1 one
(integer) 1
#批量添加zset元素
127.0.0.1:6379> zadd zset 2 two 3 three
(integer) 2
#擷取zset中所有元素
2.6 geospatital(地理位置)
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
#倒序查詢
127.0.0.1:6379> zrevrange zset 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zadd zset -1 -one
(integer) 1
127.0.0.1:6379> zadd zset -2 -two
(integer) 1
#正序排序,從-∞到+∞
127.0.0.1:6379> zrangebyscore zset -inf +inf
1) "-two"
2) "-one"
3) "one"
4) "two"
5) "three"
127.0.0.1:6379> zrangebyscore zset -1 +inf
1) "-one"
2) "one"
3) "two"
4) "three"
#倒序排序,從+∞到-∞
127.0.0.1:6379> zrevrangebyscore zset +inf -1
1) "three"
2) "two"
3) "one"
4) "-one"
127.0.0.1:6379> zrem zset one
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "-two"
2) "-one"
3) "two"
4) "three"
#集合的長度
127.0.0.1:6379> zcard zset
(integer) 4