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