Redis一共分為五種基本數據類型:String、Hash、List、Set、Zset.
string
- 內部編碼有三種,raw,embstr,int ?
- String 是二進制的。可以存儲序列化對象,圖片,字符串,數值等 ?
- set和get方法 :設置值 set key value;取值 get key ;刪除值 del key ?
- setnx(not exists):name 如果不存在進行設置,存在就不需要進行設置了,返回0 ?
- setex(expired)/psetex(毫秒單位)? :set key 10 value 設置key有效期為10秒,10秒后返回nil ?
- setrange? :setrange key index value (index 表示從第幾位開始替換)
- 使用一次性設置多個和獲取多個值的mset、mget方法:mset key1 value1 key2 value2 key3 value3 ;mget key1 key2 key3 ;msetnx
- 一次性設置和取值的getset方法 :set key value ;getset key value1,這個getset key value1返回的是value,使用get vakue得到value1的值
- incr和decr方法:對某一個值進行遞增和遞減
- incrby和decrby方法:對某個值進行指定長度的遞增和遞減
- append [name]方法:字符串追加方法
- strlen [name]方法:獲取字符串的長度
HASH
- Hash類型是String類型的field和value的映射表,或者說一個String集合。它的特別適合存儲對象,相比較而言,將一個對象類型存儲在Hash類型里要比存儲在String類型里占用更少的內存空間,并方便存取整個對象。
- 形如:hset key field value(含義是 hset是hash集合, key是集合名字 field是字段名 value為其值)使用hget ?key field 獲取內容,也可以存儲多個值
- hmset可以進行批量存儲多個鍵值對:hmset key field1 value1 field2 value2,也可使用hmget進行批量獲取多個鍵值對。
- 同樣也有hsetnx,和setnx大同小異,不存在則賦值,存在不修改
- hincrby集合遞增。
- hexists 是否存在key 如果存在返回,不存在返回0
- hlen 返回hash集合里的所有的鍵數值
- hdel 刪除指定hash的field
- hkeys 返回hash里所有的字段
- hvals 返回hash的所有value
- hgetall 返回hash里所有的key和value
LIST
- List類型是一個鏈表結構的集合,其主要功能有push、pop、獲取元素等。更詳細的說,List類型是一個雙向鏈表的結構,我們可以通過相關操作進行集合的頭部或者尾部添加刪除元素,list的設計非常簡單精巧,即可以做為棧,又可以作為隊列
- lpush方法: 從頭部加入元素(棧) 先進后出: lpush key1 value ;lrange list1 0 -1表示從頭取到末尾
- rpush方法:從尾部加入元素(隊列) 先進先出: rpush key2 ?value rpush list2 ?value2 lrange key2 0 -1
- linsert方法:插入元素 Linsert keys before [element] [newelement]
- LSET key index value 設置 index 位置的list元素的值為 value
- LREM key count value 從存于 key 的列表里移除前 count 次出現的值為 value 的元素。 這個 count 參數通過下面幾種方式影響這個操作
- count > 0: 從頭往尾移除值為 value 的元素
- count < 0: 從尾往頭移除值為 value 的元素
- count = 0: 移除所有值為 value 的元素
- LTRIM key start stop 修剪(trim)一個已存在的 list,這樣 list 就會只包含指定范圍的指定元素。start 和 stop 都是由0開始計數的, 這里的 0 是列表里的第一個元素(表頭),1 是第二個元素,以此類推。
- LPOP key 移除并且返回 key 對應的 list 的第一個元素
- RPOP key 移除并返回存于 key 的 list 的最后一個元素
- RPOPLPUSH source destination 原子性地返回并移除存儲在 source 的列表的最后一個元素(列表尾部元素), 并把該元素放入存儲在 destination 的列表的第一個元素位置(列表頭部)
- LINDEX key index 返回名稱為key的list中 index位置的元素
- LLEN key 返回存儲在 key 里的list的長度
SET
- set集合是string類型的無序集合 ,set是通過intset或者hashtable實現的,對集合我們可以取交集、并集、差集
- 內部編碼有 intset(元素類型是int類型的且元素的個數小于512字節)和hashtable(元素中有非int類型或者個數大于512字節)
- SADD key member [member ...] 添加一個或多個指定的member元素到集合的 key中, set集合不允許重復元素 smembers查看set集合的元素
- SREM key member [member ...] 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素則忽略 如果key集合不存在則被視為一個空的集合,該命令返回0
- SPOP key [count]隨機返回刪除的key
- SDIFF key [key ...] 返回一個集合與給定集合的差集的元素.
- SDIFFSTORE destination key [key ...] 該命令類似于 SDIFF, 不同之處在于該命令不返回結果集,而是將結果存放在destination集合中.如果destination已經存在, 則將其覆蓋重寫
- SINTER key [key ...] 返回指定所有的集合的成員的交集.
- SINTERSTORE destination key [key ...] 這個命令與SINTER命令類似, 但是它并不是直接返回結果集,而是將結果保存在 destination集合中.
- SUNION key [key ...] 返回給定的多個集合的并集中的所有成員.
- SUNIONSTORE destination key [key ...] 該命令作用類似于SUNION命令,不同的是它并不返回結果集,而是將結果存儲在destination集合中.
- SMOVE source destination member 將member從source集合移動到destination集合中. 對于其他的客戶端,在特定的時間元素將會作為source或者destination集合的成員出現
- SCARD key 集合元素的數量,SRANDMEMBER key [count]隨機返回一元素
- SISMEMBER key member 返回成員 member 是否是存儲的集合 key的成員
- 有序集合有兩種內部編碼方式:ziplist和skiplist
ZSET
- 元素個數小于128且元素值小于64使用ziplist編碼,否則使用skiplist編碼
- ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 將所有指定成員添加到鍵為key有序集合(sorted set)里面。 添加時可以指定多個分數/成員(score/member)對。 如果指定添加的成員已經是有序集合里面的成員,則會更新改成員的分數(scrore)并更新到正確的排序位置.
- XX: 僅僅更新存在的成員,不添加新成員。
- NX: 不更新存在的成員。只添加新成員
- CH: 修改返回值為發生變化的成員總數,原始是返回新添加成員的總數
- INCR: 當ZADD指定這個選項時,成員的操作就等同ZINCRBY命令,對成員的分數進行遞增操作
- ZREM key member [member ...]刪除名稱為key的zset中的元素member
- ZINCRBY key increment member 為有序集key的成員member的score值加上增量increment
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回key的有序集合中的分數在min和max之間的所有元素(包括分數等于max或者min的元素)。元素被認為是從低分到高分排序
- ?ZREMRANGEBYRANK key start stop 移除有序集key中,指定排名(rank)區間內的所有成員。下標參數start和stop都以0為底,0處是分數最小的那個元素
- ZRANK key member 返回有序集key中成員member的排名,從小到大。
- ZREVRANK key member 返回有序集key中成員member的排名,其中有序集成員按score值從大到小排列。
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 找到指定區間范圍的數據進行返回
- COUNT key min max 返回有序集key中,score值在min和max之間(默認包括score值等于min或max)的成員個數。
查看
- 如果使用set test1 value1進行設置,使用命令object encoding test1查看編碼方式
- 字符串39位數以內使用embstr編碼,39位以上使用raw編碼
- list編碼方式最新的只有quicklist,原先的ziplist和linkedlist已經取消
RedisObject實例講解
?
- 數據類型,參考上圖的數據結構
- 編碼方式,參考上圖的內部編碼
- 數據指針,key對應的數據存在哪個SDS對象中
- SDS包含三部分,len表示數據的長度,free表示空閑空間,buffer存儲數據