久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis常用數據類型操作指令有哪些

147次閱讀
沒有評論

共計 6661 個字符,預計需要花費 17 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章將為大家詳細講解有關 Redis 常用數據類型操作指令有哪些,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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 開頭的 key
exists key 判斷一個 key 是否存在,存在返回 1,不存在返回 0
expire key second 設定一個 key 的活動時間(秒)
pexpire key milliseconds 設定一個 key 的活動時間(毫秒)
del key 刪除一個 key
ttl key 返回一個 key 的剩余時間,key 不存在時返回 -2;key 存在但未設置剩余生存時間返回 -1
persist key 取消過期時間
select dbindex 選擇數據庫,默認有 16 個,索引從 0 開始
move key, dbindex 移動當前數據庫中的 key 到 dbindex 數據庫
randomkey 隨機返回一個 key
keyrename key, key2 重命名 key
dbsize 返回當前數據庫中 key 的數量
info 查看數據庫信息
config get * 實時存儲收到的請求,返回相關的配置
type(key) 返回值的類型

flushdb 刪除當前選擇數據庫中的所有 key
flushall 刪除所有數據庫中的所有 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 不存在則返回 nil
getrange key start end 獲取指定 key 的 value 的子字符串,包括 start 和 end 角標
getbit key offset 對 key 所儲存的字符串值,獲取指定偏移量的 bit(二進制)
getset key value 為 key 設新值,同時返回舊值,key 不存在返回 nil
substr(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 對應 +1
incrby key integer key 的 value 對應 +integer
decr key key 的 value 對應 -1
decrby 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 和 value
hsetnx 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 表中的字段對應的 value
hexists key field 查看 Hash 表 Key 中,指定的字段是否存在
hlen key 獲取 Hash 表中字段的數量

刪除語法

hdel key field1 field2 … fieldn 刪除一個或多個 Hash 表的字段
del key 同 Key

增減語法

hincrby key field integer 為 Hash 表 Key 中 field 對應的 value 增加 integer
hincrbyfloat 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 的 key
blpop 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,內存占用減少明顯。

Redis 常用數據類型操作指令有哪些
pfadd key element1 element2 … elementN 添加指定元素到 HyperLogLog 中
pfcount key 返回給定 HyperLogLog 的基數估算值
pfmerge destkey sourcekey1 sourcekey2 …sourcekeyN 將多個 HyperLogLog 合并為一個 HyperLogLog

關于“Redis 常用數據類型操作指令有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計6661字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 岳普湖县| 克什克腾旗| 赤壁市| 灌阳县| 伊通| 扶绥县| 静安区| 安塞县| 石林| 原平市| 和田县| 张掖市| 扬州市| 乌鲁木齐县| 孟村| 顺昌县| 奉节县| 白山市| 洪雅县| 济南市| 徐汇区| 承德市| 屏边| 巴南区| 阿尔山市| 叶城县| 通江县| 怀柔区| 乌拉特中旗| 固原市| 房产| 元江| 特克斯县| 乌拉特前旗| 芮城县| 深水埗区| 文化| 苍溪县| 合川市| 邹平县| 永清县|