redis - 五大數據類型

一,String 字符串
#存值
set name ztind
#取值
get name
#爲key追加值,若key不存在則自動創建
append name good
#查看key的value值長度
strlen key

***************字符串數自增減*****************
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> incr views  #自加1(i++)
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> incr views
(integer) 3
127.0.0.1:6379> decr views #自減1(i--)
(integer) 2
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> decr views
(integer) -1
127.0.0.1:6379> incrby views 5 #自加帶步長
(integer) 4
127.0.0.1:6379> incrby views 5
(integer) 9
127.0.0.1:6379> decrby views 2  #自減帶步長
(integer) 7
127.0.0.1:6379> decrby views 2
(integer) 5
127.0.0.1:6379> 

***************截取字符串*****************
127.0.0.1:6379> set language golang
OK
127.0.0.1:6379> getrange language 2 5 #截取字符串 [2,5]
"lang"
127.0.0.1:6379> getrange language 0 -1 #截取全部字符串
"golang"
127.0.0.1:6379> 

***************replace字符串*****************
127.0.0.1:6379> setrange language 1 a #將1位置的o替換爲a
(integer) 6
127.0.0.1:6379> get language
"galang"
127.0.0.1:6379> 

***************setex setnx*****************
setex (set white expire)設置key並且設置過期時間
setnx ( set if not exist ) 若果不存在才設置該key。常用於分佈式系統中

127.0.0.1:6379> setex key 10 hello  #設置key和過期時間
OK
127.0.0.1:6379> ttl key
(integer) 6
127.0.0.1:6379> ttl key
(integer) 5
127.0.0.1:6379> setnx age 15 #若age不存在則設置該值
(integer) 1
127.0.0.1:6379> get age
"15"
127.0.0.1:6379> 

***************mset mget*****************
mset (many set) 一次性設置多個 key-value
msetnx (many set if not exist)多個key-value一起設置如果不存在的話,原子性,同生共死
mget (many get) 一次性取多個key的value
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "language"
3) "k2"
4) "k1"
5) "age"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> 

***************key或value巧妙不定格式實現法*****************
mset articles:{id}:views 100 類似格式可設置某篇文章的遊覽量
127.0.0.1:6379> mset user:1:name ztind user:1:age 18
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "ztind"
2) "18"
127.0.0.1:6379> 

***************getset*****************
127.0.0.1:6379> getset sex man #先get值然後返回set的old值
(nil)
127.0.0.1:6379> get sex
"man"
127.0.0.1:6379> getset sex woman
"man"

string類型的使用場景:

  1. 計數器
  2. 對象數據存儲(json類型數據)
  3. 數據統計(熱搜,文章遊覽量,粉絲數量,排行榜,session)
二,List 列表
127.0.0.1:6379> lpush list a #存值,將一個值或多個值插入到列表左部
(integer) 1
127.0.0.1:6379> lpush list b
(integer) 2
127.0.0.1:6379> lpush list c
(integer) 3
127.0.0.1:6379> lrange list 0 -1 #取所有值
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> 

127.0.0.1:6379> rpush list right #存值,將一個值或多個值插入到列表右部
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "right"
127.0.0.1:6379> 

127.0.0.1:6379> lpop list #將集合最左邊的第一個元素移出
"c"
127.0.0.1:6379> rpop list #將集合最右邊的第一個元素移出
"right2"

LLEN key
獲取列表長度

LINDEX key index
通過索引獲取列表中的元素

LREM key count value
移除列表元素(count移出幾個,value是可以重複的)

LTRIM key start stop
對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

RPOPLPUSH source destination
移除列表的最後一個元素,並將該元素添加到另一個列表並返回

LSET key index value
通過索引設置列表元素的值

LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者後插入元素

list爲一雙向鏈表,支持左右的數據插入和彈出。可實現隊列(lpush rpop),棧(lpush lpop)數據結構模式的數據輸出。

三,Set 無序集合

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的數據。

SADD key member1 [member2]
向集合添加一個或多個成員

SREM key member1 [member2]
移除集合中一個或多個成員

SMEMBERS key
返回集合中的所有成員

SISMEMBER key member
判斷 member 元素是否是集合 key 的成員

SCARD key
獲取集合的成員數

SRANDMEMBER key [count]
返回集合中一個或多個隨機數

SPOP key
移除並返回集合中的一個隨機元素

差集:
SDIFF key1 [key2]
返回給定所有集合的差集
並集:
SUNION key1 [key2]
返回所有給定集合的並集
交集:
SINTER key1 [key2]
返回給定所有集合的交集

應用:可使用集合的交集功能實現共同關注,共同聽歌歌曲,等功能

四,Hash 哈希

hase是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。
即:hase存儲的是一個類似Map的數據結構。key - map(field - value)

127.0.0.1:6379> hset key name ztind age 18 #設置key和對應的map映射值
(integer) 2
127.0.0.1:6379> hgetall key	#獲取hase裏的所有field和value
1) "name"
2) "ztind"
3) "age"
4) "18"
127.0.0.1:6379> 

127.0.0.1:6379> hkeys key  #獲取hase裏的所有field
1) "name"
2) "age"
127.0.0.1:6379> hvals key #獲取hase裏的所有field對應的value
1) "ztind"
2) "18"
127.0.0.1:6379> 

127.0.0.1:6379> hmget key name age #獲取指定key下多個filed對應的value
1) "ztind"
2) "18"
127.0.0.1:6379> 

127.0.0.1:6379> hget key name #獲取指定key下指定field的值
"ztind"
127.0.0.1:6379> 

HSET key field value
將哈希表 key 中的字段 field 的值設爲 value 。

HMSET key field1 value1 [field2 value2 ]
同時將多個 field-value (域-值)對設置到哈希表 key 中。

HGET key field
獲取存儲在哈希表中指定字段的值。

HMGET key field1 [field2]
獲取所有給定字段的值

HGETALL key
獲取在哈希表中指定 key 的所有字段和值

HDEL key field1 [field2]
刪除一個或多個哈希表字段

HKEYS key
獲取所有哈希表中的字段

HVALS key
獲取哈希表中所有值。

HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。

HINCRBY key field increment
爲哈希表 key 中的指定字段的整數值加上增量 increment 。

HINCRBYFLOAT key field increment
爲哈希表 key 中的指定字段的浮點數值加上增量 increment 。
五,Zset 有序集合

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重複。
應用場景:成績,工資,排行榜排序,熱度排序等。

127.0.0.1:6379> zadd key 1 go   #向有序集合添加值,score來排序
(integer) 1
127.0.0.1:6379> zadd key 2 php
(integer) 1
127.0.0.1:6379> zadd key 3 java
(integer) 1
127.0.0.1:6379> zadd key 3 python
(integer) 1
127.0.0.1:6379> zrange key 0 -1  #獲取有序集合裏的所有值
1) "go"
2) "php"
3) "java"
4) "python"
127.0.0.1:6379> 

127.0.0.1:6379> zrange key 0 -1 withscores  # withscores 帶上score顯示出來
1) "go"
2) "1"
3) "php"
4) "2"
5) "java"
6) "3"
7) "python"
8) "3"
127.0.0.1:6379> 

127.0.0.1:6379> zrem key python #刪除有序集合裏的元素
(integer) 1

127.0.0.1:6379> zrank key php #php所在索引位置
(integer) 1
127.0.0.1:6379> 

127.0.0.1:6379> zrevrange key 0 -1  #倒序排序 score高到低
1) "java"
2) "php"
3) "go"
127.0.0.1:6379> 

ZADD key score1 member1 [score2 member2]
向有序集合添加一個或多個成員,或者更新已存在成員的分數

ZRANGE key start stop [WITHSCORES]
通過索引區間返回有序集合指定區間內的成員

ZRANK key member
返回有序集合中指定成員的索引

ZREM key member [member ...]
移除有序集合中的一個或多個成員

ZSCORE key member
返回有序集中,成員的分數值

ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定區間內的成員,通過索引,分數從高到低

ZCOUNT key min max
計算在有序集合中指定區間分數的成員數

ZINCRBY key increment member
有序集合中對指定成員的分數加上增量 increment
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章