Redis學習筆記(二) Redis的五大數據類型

//查看當前庫的全部值
keys * 

//判斷某個鍵是否存在
exists<key>

//查看鍵的類型
type<key>

//刪除某個鍵
del<key>

//爲鍵值設置過時時間,單位秒
expire <key>  <seconds>

//查看還有多少秒過時  -1表示永不過時   -2表示已通過期
ttl<key>

String

  • StringRedis最基本的類型,一個key對應一個value
  • String類型是二進制安全的。意味着Redisstring能夠包含任何數據。
  • String類型是Redis最基本的數據類型,一個Redis中字符串value最多能夠是512M

 

//獲取值的範圍 (包前也包後)
getrange <key> <起始位置> <結束位置>


//用<value> 覆寫《key》所存儲的字符串值,從<起始位置>開始
setrange<key> <起始位置>  <value>

//設置鍵值的同時,設置過時時間,單位秒。
setex  <key>  <過時時間>   <value>


//以新換舊,設置了新值同時得到舊值。
getset <key>  <value>

List

單鍵多值
  • Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素導列表的頭部(左邊)或者尾部(右邊)。
  • 它的底層實際是個雙向鏈表,對兩端的操做性能很高,經過索引下標的操做中間的節點性能會較差。
//從左邊/右邊插入一個或多個值。
lpush/rpush  <key>  <value1>  <value2>  <value3> ....

//從左邊/右邊吐出一個值。
//值在鍵在,值光鍵亡。

lpop/rpop  <key>

//從<key1>列表右邊吐出一個值,插到<key2>列表左邊。
 rpoplpush  <key1>  <key2>

Set

  • Redis set對外提供的功能與list相似是一個列表的功能,特殊之處在於set是能夠自動排重的,當你須要存儲一個列表數據,又不但願出現重複數據時,set是一個很好的選擇.而且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。
  • RedisSetstring類型的無序集合。它底層實際上是一個valuenullhash表(Map),因此添加,刪除,查找的複雜度都是O(1)

//返回兩個集合的交集元素
sinter<key1><key2>
//返回兩個集合的並集元素
sunion<key1><key2>
//返回兩個集合的差集元素
sdiff<key1><key2>

Hash

  • Redis  hash 是一個鍵值對集合。
  • Redis hash是一個string類型的fieldvalue的映射表,hash特別適合用於存儲對象。
  • 相似Java裏面的Map<String,String>

用戶ID爲查找的key,存儲的value用戶對象包含姓名,年齡,生日等信息,若是用普通的key/value結構來存儲,主要有如下2種存儲方式:redis

每次修改用戶的某個屬性須要,先反序列化改好後再序列化回去。開銷較大。安全

 

 

用戶ID數據冗餘數據結構

 

經過 key(用戶ID) + field(屬性標籤) 就能夠操做對應屬性數據了,既不須要重複存儲數據,也不會帶來序列化和併發修改控制的問題併發

hset<key> <field> <value>
//給<key>集合中的  <field>鍵賦值<value>

hget<key1> <field>
//從<key1>集合<field> 取出 value 

hmset <key1>  <field1> <value1> <field2> <value2>...   
//批量設置hash的值

hexists <key> <fieId>
//查看哈希表 key 中,給定域 field 是否存在。 


hkeys<key>
//列出該hash集合的全部fieId


hvals<key>
//列出該hash集合的全部value


hincrby <key> <fieId> <increment>
//爲哈希表 key 中的域 field 的值加上增量 increment 
//若想實現減法   加上負數便可


hsetnx <key> <fieId> <value>
//將哈希表 key 中的域 field 的值設置爲 value ,當且僅當域 field 不存在 .
//redis不支持顯示中文

zset(sorted set)

最複雜的數據類型性能

  • Redis有序集合zset與普通集合set很是類似,是一個沒有重複元素的字符串集合。不一樣之處是有序集合的每一個成員都關聯了一個評分(score) ,這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是惟一的,可是評分能夠是重複了 。
  • 由於元素是有序的, 因此你也能夠很快的根據評分(score)或者次序(position)來獲取一個範圍的元素。訪問有序集合的中間元素也是很是快的,所以你可以使用有序集合做爲一個沒有重複成員的智能列表。

 

zadd  <key> <score1> <value1>  <score2> <value2>...spa

將一個或多個 member 元素及其 score 值加入到有序集 key 當中3d

zrange <key>  <start> <stop>  [WITHSCORES]  code

返回有序集 key 中,下標在<start> <stop>之間的元素對象

帶WITHSCORES,可讓分數一塊兒和值返回到結果集。blog

zrangebyscore key min max [withscores] [limit offset count]

返回有序集 key 中,全部 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。

zrevrangebyscore key max min [withscores] [limit offset count]

同上,改成從大到小排列。

zincrby <key> <increment> <value>

爲元素的score加上增量

zrem  <key>  <value> 

刪除該集合下,指定值的元素

zcount <key>  <min>  <max>

統計該集合,分數區間內的元素個數

zrank <key>  <value>

返回該值在集合中的排名,從0開始。

 

咱們在使用的時候挑選哪些數據結構做爲存儲,能夠簡單看看:

  • string-->簡單的key-value

  • list-->有序列表(底層是雙向鏈表)-->可作簡單隊列

  • set-->無序列表(去重)-->提供一系列的交集、並集、差集的命令

  • hash-->哈希表-->存儲結構化數據

  • sortset-->有序集合映射(member-score)-->排行榜

相關文章
相關標籤/搜索