您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Redis常用數據類型操作指令有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Redis 命令用于在 redis 服務上執行操作。要在 redis 服務上執行命令需要一個 redis
客戶端。可以使用redis-cli
命令啟動Redis客戶端。完整的啟動命令是redis-cli -h host -p port -a password
。
Redis常用的數據類型有五種:string、hash、list、set及zset(sorted set有序集合)。學習這些類型之前還需要學習常用命令Key的管理。下面詳細介紹這些類型:更詳細的API可以參照此處
常用命令Key管理
Key的應用場景:
限時的優惠活動信息。
網站的數據緩存(對于一些需要定時更新的數據,如積分排行榜)
手機驗證碼
限制網站訪客訪問頻率(例如1分鐘最多訪問10次)
Key的命名建議:
key名稱區分大小寫;key不要太長,盡量不超過1024字節,太長會降低查找效率;在一個項目中key最好使用統一的命名模式,如user:id:password
keys pattern
返回滿足給定pattern的所有key,可以模糊匹配,如keys abc*
代表abc開頭的keyexists key
判斷一個key是否存在,存在返回1,不存在返回0expire key second
設定一個key的活動時間(秒)pexpire key milliseconds
設定一個key的活動時間(毫秒)del key
刪除一個keyttl key
返回一個key的剩余時間,key不存在時返回-2;key存在但未設置剩余生存時間返回-1persist key
取消過期時間select dbindex
選擇數據庫,默認有16個,索引從0開始move key, dbindex
移動當前數據庫中的key到dbindex數據庫randomkey
隨機返回一個keykeyrename key, key2
重命名keydbsize
返回當前數據庫中key的數量info
查看數據庫信息config get *
實時存儲收到的請求,返回相關的配置type(key)
返回值的類型
flushdb
刪除當前選擇數據庫中的所有keyflushall
刪除所有數據庫中的所有key
一、字符串String
String是redis最基本的類型,一個鍵最大能存儲523MB。String類型是二進制安全的。意思是redis的String可以包含任何數據。比如圖片或者序列化的對象 。
String的應用場景:
String通常用于保存單個字符串或JSON字符串數據。
因為String是二進制安全的,可以把圖片文件的內容作為字符串來存儲。
計數器(常規key-value緩存應用,粉絲數、微博數量,投票等)
INCR 等指令本身就具有原子操作的特性,所以完全可以利用 Redis 的 NCR、INCRBY、DECR、DECRBY 等指令來實現原子計數的效果。假如,在某種場景下有 3 個客戶端同時讀取了 minum 的值(值為 2),然后對其同時進行了加 1 的操作,那么,最后 bynum 的值一定是 5。不少網站都利用 reds 的這個特性來實現業務上的統計計數需求。
賦值語法set key value
為key賦予值value,多次設置會覆蓋舊值且無視類型setnx key value
為key賦予值value,如果key已存在,則不設置并返回0,否則設置并返回1。是解決分布式鎖的方案之一。setex key time value
為key賦予值value并設定過期時間time,到期后key和value都清除。setrange key start end
設置指定區間范圍內的值,下標從0開始,替換字符串。
取值語法
get key
獲取指定key的value值,key不存在則返回nilgetrange key start end
獲取指定key的value的子字符串,包括start和end角標getbit key offset
對 key 所儲存的字符串值,獲取指定偏移量的bit(二進制)getset key value
為key設新值,同時返回舊值,key不存在返回nilsubstr(key, start, end)
返回名稱為key的string的value的子串
刪值語法del key
同Key
批量寫入mset k1 v1 k2 v2...kn vn
批量設置多個的值
批量讀出
mget k1 k2 ... kn
獲取多個key的值
自增自減incr key
key的value對應+1incrby key integer
key的value對應+integerdecr key
key的value對應-1decrby key integer
key的value對應-integer
字符串拼接append key value
將value附加到指定key的末尾
msetnx(key1, value1...keyN, valueN)
同時設置多個key和value,僅key之前都不存在時生效
字符串長度strlen key
返回key的字符長度
二、雙重鍵值對Hash
Hash類型是String類型的field和value的映射表。Hash特別適合用于存儲對象,相比String可以占用更少的磁盤空間,可以看成具有key和value的map容器。Redis中每個hash可以存儲(2^32)-1個鍵值對。
Hash的應用場景:
通常用來存儲一個用戶信息對象數據。
Redis的Hash實際是將內部存儲的value作為一個HashMap。
賦值語法
hset key field value
為指定key設置field和valuehsetnx key field value
為指定key設置field和value,如果key已存在則不生效。hmset key f1 v1 f2 v2 ... fn vn
同時將多個field-value(域值對)設置到哈希表的key中。
取值語法
hget key field
根據field獲取value值hmget key f1 f2 ... fn
根據多個field獲取所有的value值hgetall key
獲取Hash表中所有的字段和值hkeys key
獲取所有Hash表中的字段hvals key
獲取所有Hash表中的字段對應的valuehexists key field
查看Hash表Key中,指定的字段是否存在hlen key
獲取Hash表中字段的數量
刪除語法
hdel key field1 field2 ... fieldn
刪除一個或多個Hash表的字段del key
同Key
增減語法
hincrby key field integer
為Hash表Key中field對應的value增加integerhincrbyfloat key field increment
為Hash表Key中field對應的value增加increment
三、雙端鏈表List
List類型是一個鏈表結構的集合,主要功能有push、pop、獲取元素等。更詳細的說,List類型是一個雙端鏈表的結構,可以通過相關的操作進行集合頭部或者尾部元素的添加和刪除,List既可以作為棧,又可以作為隊列,能夠滿足絕大多數需求。
如果鍵不存在,創建新的鏈表。
如果鍵已存在,新增內容。
如果值全移除,對應的鍵也就消失了。
鏈表操作無論是頭和尾效率都極高,但中間元素的操作效率很低。
應用場景
對數據量大的集合數據刪減
列表數據顯示、關注列表、粉絲列表、留言評價等…分頁、熱點新聞(Top10)等。利用lrange可以很方便的實現分頁的功能,在博客系統中,每篇博文的評論也可以存入一個單獨的list中。
任務隊列
在處理web客戶端發送的命令請求時,某些操作的執行時間可能會比我們預期的更長一些,通過將待執行任務的相關信息放入隊列里面,并在之后對隊列進行處理,用戶可以推遲執行那些需要一段時間才能完成的操作,這種將工作交給任務處理器來執行的做法被稱為任務隊列(task queue)。list通常可以用來實現一個消息隊列,而且可以確保先后順序。
賦值語法
lpush key value1 value2 ... valueN
將一個或多個值插入到列表頭部(從左側添加)rpush key value1 value2 ... valueN
將一個或多個值插入到列表頭部(從右側添加)lpushx key value
將一個值插入到已存在的列表頭部(最左邊),如果列表不存在,操作無效。rpushx key value
將一個值插入到已存在的列表尾部(最右邊),如果列表不存在,操作無效。
取值語法
llen key
獲取列表長度lindex key index
通過索引獲取列表的元素lrange key start stop
獲取列表指定范圍內的元素
刪除語法
lpop key
移除并獲取列表的第一個元素(從左側移除)lpop key
移除并獲取列表的最后一個元素(從右側移除)lrem key count value
刪除count個值為value的keyblpop key1 key2 timeout
移除并獲取列表的第一個元素,如果列表沒有元素會阻塞列表,直到等待超時或發現可彈出元素為止brpop key1 key2 timeout
移除并獲取列表的最后一個元素,如果列表沒有元素會阻塞列表,直到等待超時或發現可彈出元素為止ltrim key start stop
對一個列表進行修剪,只保留指定區間內的元素,不在指定區間內的元素都刪除。
修改語法
lset key index value
通過索引設置列表元素的值linsert key before|after world value
在列表的某個元素world前或者后插入元素value。
高級命令
rpoplpush source destination
移除source列表的最后一個元素,并將該元素添加到destination列表,并返回。(可以對自己本身操作,類似隊列)brpoplpush source destination timeout
移除source列表的最后一個元素,并將該元素添加到destination列表,并返回;如果source 列表沒有元素會阻塞列表知道等待超時或發現可移除元素為止。
四、無序集合Set
Set 是 String 類型的無序集合。集合成員是唯一的,集合中不能出現重復的數據。
Redis 中的集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
類似于JAVA中的 Hashtable集合
Redis的set的底層存儲結構特別神奇,底層使用了intset和hashtable兩種數據結構存儲的,intset我們可以理解為數組,hashtable就是普通的哈希表(key為set的值,value為null)。
intset內部其實是一個數組(int8_t coentents[]數組),而且存儲數據的時候是有序的,因為在查找數據的時候是通過二分查找來實現的。
應用場景
對兩個集合間的數據[計算]進行交集、并集、差集運算
以非常方便的實現如共同關注、共同喜好、二度好友等功能。對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存儲到一個新的集合中。
利用唯一性,可以統計訪問網站的所有獨立 IP
賦值語法
sadd key member1 member2 ... memberN
向集合添加一個或多個成員
取值語法
scard key
獲取集合的成員數smembers key
返回集合中的所有成員sismember key member
判斷 member 元素是否是集合 key 的成員(開發中:驗證是否存在判斷)srandmember key count
返回集合中一個或多個隨機數
刪除語法
srem key member1 member2...memberN
移除集合中一個或多個成員spop kye count
移除并返回集合中的一個或多個隨機元素
smove source destincation member
將member元素從source集合移動到destination集合
差集語法
sdiff key1 key2
返回給定所有集合的差集(左側)sdiffstore destination key1 key2
返回給定所有集合的差集并存儲在 destination 中(destination中原有的數據清除)
交集語法
sinter key1 key2
返回給定所有集合的交集(共有數據)sinterstore destination key1 key2
返回給定所有集合的交集并存儲在 destination 中
并集語法sunion key1 key2
返回所有給定集合的并集sunionstore destination key1 key2
所有給定集合的并集存儲在 destination 集合中
五、有序集合Zset
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。
之前的set是k1 v1 v2
現在的zset是k1 score1 v1 score2 v2
應用場景
排行榜
①twitter 的public timeline可以以發表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。
②一個存儲全班同學成績的Sorted Set,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。
③用Sorted Set來做帶權重的隊列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。
賦值語法zadd key score1 member1 score2 member2
向有序集合添加一個或多個成員,或者更新已存在成員的分數
取值語法zcard key
獲取有序集合的成員數zcount key min max
計算在有序集合中指定區間分數的成員數zrank key member
返回有序集合中指定成員的索引zrange key start stop [withscores]
通過索引區間返回有序集合成指定區間內的成員(低到高)zrevrange key start stop [withscores]
通過索引區間返回有序集合成指定區間內的成員(高到低)zlexcount key,min,max
在有序集合中計算指定字典區間內成員數量
刪除語法del key
移除集合zrem key member [member ...]
移除有序集合中的一個或多個成員zremrangebyrank key start stop
移除有序集合中給定的排名區間的所有成員(第一名是0)(低到高排序)zremrangebyscore key min max
移除有序集合中給定的分數區間的所有成員
分數自增zincrby key ncrement member
有序集合中對指定成員的分數加上增量increment
六、HyperLoglog
Redis在2.8.9版本添加了HyperLoglog結構。該結構是用來做基數統計的算法,
優點:無論輸入元素多少,計算基數所需要的空間總是固定的,并且很小。
缺點:只會根據輸入元素的計算基數,而不會存儲輸入元素本身,索引不能像集合那樣,返回輸入的各個元素。
什么是基數?
比如數據集{1,2,3,3,4,5,5},那么這個數據集的基數集為{1,2,3,4,5},基數為5。所謂基數估計就是在誤差可接受的范圍內,快速計算基數。
為什么要使用HyperLogLog?
傳統的統計一個對象的基數值需要12M內存,如果統計1萬個對象,需要將近120G內存,無法廣泛應用于大數據場景;而使用了HyperLogLog,統計1億個數據的基數值,大約需要12M,內存占用減少明顯。
pfadd key element1 element2 ... elementN
添加指定元素到HyperLogLog中pfcount key
返回給定HyperLogLog的基數估算值pfmerge destkey sourcekey1 sourcekey2 ...sourcekeyN
將多個HyperLogLog合并為一個HyperLogLog
關于“Redis常用數據類型操作指令有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。