Redis的資料型別和常用操作
阿新 • • 發佈:2018-11-25
五大資料型別
字串:String
- String是Redis最基本的型別,一個Key對應一個Value
- String型別是二進位制安全的,意思是Redis的String可以包含任何資料,例如一張jpg格式的圖片或者一個序列化的物件
- 一個Redis的字串型別Value最多可以是512M
列表:List
- 字串列表,依照插入順序排序
- 資料結構為連結串列
集合:Set
- String型別的無序集合
- 通過HashTable實現
雜湊:Hash(類似於Java中的Map)
- 一個鍵值對集合
- hash是一個String型別的field和value的對映表,hash特別適用於儲存物件
- 類似於Java中的Map(String,Object)
有序集合:Zset(sorted set)
- Zset和Set一樣是String型別元素的集合,且不允許重複
- 與Set不同的是每一個元素前都會有一個double型別的分數
- 雖然元素是惟一的,但是分數可以重複
Redis常見資料型別操作命令
Redis鍵:Key
命令 | 作用 |
---|---|
keys * | 獲取當前資料庫的所有key |
exists key | 判斷指定的key是否存在,1代表存在,0代表不存在 |
expire key s | 為指定的key設定生命週期為s秒,s秒之後該key自動銷燬 |
ttl key | 檢視指定的key生命週期剩餘時間,若為-1則永不過期,為-2則是已經過期 |
move key db | 將key移動到指定的資料庫,並將當前庫中的記錄刪除 |
del key | 刪除指定的key |
Redis字串:String
命令 | 作用 |
---|---|
append key newValue | 在key對應的value後面追加值,追加的值為newValue |
strlen key | 獲取key對應的value的長度 |
incr key | 將key對應的value的值加1,value的型別需要為int |
decr key | 將key對應的value的值減1,value的型別需要為int |
incrby key x | 將key對應的value的值加x,value的型別需要為int |
decrby key x | 將key對應的value的值減x,value的型別需要為int |
getrange key begin end | 擷取並返回key對應的value的值,擷取範圍為[begin,end] |
setrange key index newValue | 將key對應value的指定範圍內的值重置為newValue,範圍的開始為index |
setex key s value | 新增key:value,生命週期為s秒 |
setnx key value | 如果key在當前資料庫不存在則新增key:value |
mset | 批量增加key:value |
mget | 批量獲取value |
msetnx | 批量設定,如果批量的key中有一個存在的,則全部都不能新增 |
程式碼示例
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> get k1
"2"
127.0.0.1:6379> incr k1
(integer) 3
127.0.0.1:6379> incrby k1 2
(integer) 5
127.0.0.1:6379> decrby k1 4
(integer) 1
127.0.0.1:6379> append k1 2345678
(integer) 8
127.0.0.1:6379> strlen k1
(integer) 8
127.0.0.1:6379> get k1
"12345678"
127.0.0.1:6379> getrange k1 0 3
"1234"
127.0.0.1:6379> setrange k1 0 xx
(integer) 8
127.0.0.1:6379> get k1
"xx345678"
127.0.0.1:6379> setex k2 10 v2
OK
127.0.0.1:6379> ttl k2
(integer) 6
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> setnx k3 v4
(integer) 0
127.0.0.1:6379> mset 1 1 2 2 3 3 4 4
OK
127.0.0.1:6379> mget 1 2 3 4
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> msetnx 5 5 6 6
(integer) 1
127.0.0.1:6379> msetnx 5 5 6 6
(integer) 0
127.0.0.1:6379>
Redis列表:List
命令 | 作用 |
---|---|
lpush key [value] | 從左邊開始將value壓入列表key,相當於棧 |
rpush key [value] | 從右邊開始將rtvalue壓入列表key,相當於佇列 |
lrange key start end | 從左邊第start位到end位獲取列表key的值,若end為-1相當於到列表尾部 |
lpop key | 彈出左邊第一位的值 |
rpop key | 彈出右邊第一位的值 |
lindex key i | 取出列表key左邊第i為的值 |
llen key | 獲取列表key的長度 |
lrem key n value | 刪除列表key中n個value |
ltrim key begin end | 擷取列表key從begin到end的值,再賦值給key |
rpoplpush k1 k2 | 取出k1的尾部新增到k2的頭部 |
lset key index value | 將列表key的第index為賦值為value |
linsert key before/end i value | 在列表第i位之前/之後插入value |
Redis集合:Set
命令 | 作用 |
---|---|
sadd key [value] | 增加一個set集合 |
smembers key | 列出集合key的所有元素 |
sismember key value | 判斷value是否是集合key的一個元素 |
srandmember key n | 隨機獲取集合key的n的元素 |
spop key n | 隨機彈出集合key的n個元素 |
srem key value | 刪除集合key中value元素 |
smove k1 k2 value | 將集合k1中的元素移到k2 |
sunion k1 k2 | 求k1與k2的並集 |
sdiff k1 k2 | 求k1與k2的差集 |
sinter k1 k2 | 求k1與k2的交集 |
Redis雜湊:Hash
命令 | 作用 |
---|---|
hset key field value | 在雜湊key中新增鍵值對key:value |
hget key field | 得到雜湊key中鍵為field的值 |
hmset key [field value] | 在雜湊key中批量設定鍵值對 |
hmget key [field] | 批量得到雜湊key中的值 |
hgetall key | 得到雜湊key中所有的鍵值對 |
hlen key | 得到雜湊key的長度 |
hexists key field | 判斷鍵field在雜湊key中是否存在 |
hkeys key | 得到雜湊key中所有的鍵 |
hvals key | 得到雜湊key中所有的value |
hincrby key field n | 將雜湊key中鍵為field的值加n |
hincrbyfloat key field x | 將雜湊key中鍵為field的值加x,x可以是浮點數 |
hsetnx key field value | 在雜湊key中新增鍵值對key:value,若key存在則新增失敗 |
Redis有序集合:Zset
命令 | 作用 |
---|---|
zadd key [score value] | 在有序集合Zset中新增 [分數 元素] |
zrange key start end | 遍歷有序集合key中的元素 |
zrangebyscore key start end | 根據分數遍歷有序集合Zset中的分數和元素 |
zrem key score | 根據分數刪除有序集合Zset中的元素 |