当前位置:网站首页>Redis數據類型日常使用場景
Redis數據類型日常使用場景
2022-06-11 12:24:00 【請叫我靚仔丶】
一、 String
1. 緩存
簡單的key-value存儲
2. 分布式鎖
setnx key value,當key不存在時,將key 的值設為 value ,返回1;
若給定的 key 已經存在,則setnx不做任何動作,返回0。
當setnx返回1時,錶示獲取鎖,做完操作以後del key,錶示釋放鎖;如果 setnx返回0錶示獲取鎖失敗,整體思路大概就是這樣
3. 計數器
Redis中有一個字符串相關的命令incr key,incr命令將 key 中儲存的數字值增一,返回結果分為以下三種情况:
- 值不是整數,返回錯誤
- 值是整數,返回自增後的結果
- key不存在, key 的值會先被初始化為 0 ,返回1
比如文章的閱讀量,視頻的播放量等等都會使用redis來計數,每播放一次,對應的播放量就會加1,同時將這些數據异步存儲到數據庫中達到持久化的目的。
set key 0
incr key // incr readcount::{帖子id} 每閱讀一次
get key // get readcount::{帖子id} 獲取閱讀量
4. IP限制
為了安全考慮,會對IP進行限制,限制同一IP在一定的時間內訪問次數不能超過N次
二、 List
Redis 裏的 List 是一個鏈錶,由於鏈錶本身插入和删除比較塊,但是查詢的效率比較低,所以常常被用做异步隊列。Redis 裏的 List 設計非常牛,當數據量比較小的時候,數據結構是壓縮鏈錶,而當數據量比較多的時候就成為了快速鏈錶。
列錶類型用來存儲多個有序的字符串,一個列錶最多可以存儲2^32-1個元素,列錶的兩端都可以插入和彈出元素。
1.消息隊列
在業務中异步隊列使用 rpush/lpush 操作隊列,使用 lpop 和 rpop 出隊列,具體結構如下圖所示:
Redis雖然支持消息隊列的實現,但是並不支持ack。所以redis實現的消息隊列不能保證消息的可靠性,除非自己實現消息確認機制,不過這非常麻煩,所以如果是重要的消息還是推薦使用專門的消息隊列去做。
2.文章列錶
因為列錶的元素不但是有序的,而且還支持按照索引範圍獲取元素。因此我們可以使用命令lrange key 0 9分頁獲取文章列錶
三、 Hash
Redis的散列可以讓用戶將多個鍵值對存儲到一個Redis的鍵裏面,散列非常適用於將一些相關的數據存儲在一起。類似map的一種結構,將結構化的數據,比如一個對象(前提是這個對象沒嵌套其他的對象)給緩存到redis中,以後每次讀寫內存時,就可以操作hash裏的某個字段。
1.Hash內部編碼
哈希類型的內部編碼有倆種
- zipList(壓縮列錶):當哈希類型元素個數小於hash-max-ziplist-entries配置(默認512個)同時所有值都小於hash-max-ziplist-value配置(默認64字節)時使用。ziplist使用更加緊凑的結構實現多個元素的連續存儲,所以比hashtable更加節省內存。
- hashtable(哈希錶):當ziplist不能滿足要求時,會使用hashtable。
2.使用場景
由於hash類型存儲的是多個鍵值對,比如數據庫有以下一個用戶錶結構
| ID | NAME | age |
|---|---|---|
| 1 | 靚仔 | 28 |
hset user:1 name 靚仔 age 28
使用哈希存儲會比字符串更加方便直觀
四、 set
set集合類型也可以保存多個字符串元素,與列錶不同的是,集合中不允許有重複元素並且集合中的元素是無序的。一個集合最多可以存儲2^32-1個元素。
無序集合,自動去重,將數據放到set中就可去重,可以基於JVM的HashSet去重,如果系統部署在多臺機器上,就可以用redis進行全局去重。可以基於set做交集,並集,差集的操作。如把2個人的粉絲列錶弄一個交集,就能看到兩個人的共同好友是誰。
1. 抽獎功能
集合有兩個命令支持獲取隨機數,分別是:
- 隨機獲取count個元素,集合元素個數不變
srandmember key [count]
- 隨機彈出count個元素,元素從集合中彈出,集合元素個數改變
spop key [count]
用戶點擊抽獎按鈕,參數抽獎,將用戶編號放入集合,然後抽獎,分別抽一等獎、二等獎,如果已經抽中一等獎的用戶不能參數抽二等獎則使用spop,反之使用srandmember。
五、 Zset(sorted set )
zset是Redis中最具有特色的數據結構(跳躍列錶),首先它有set不可重複的特性,在這個基礎上,還可以給value賦予一個排序權重score,所謂的有序其實就是根據這個得分來排序。排序的set,可以去重還可以排序,寫進去的時候給一個分數,自動根據根據分數排序,分數可以自定義排序規則。
Redis 有序集合zset和集合set一樣也是String類型元素的集合,且不允許重複的成員。不同的是 zset 的每個元素都會關聯一個分數(分數可以重複),redis 通過分數來為集合中的成員進行從小到大的排序。Redis的zset天生是用來做排行榜的,榜單,總榜,熱榜。
1、zset內部編碼
有序集合類型的內部編碼有兩種:
ziplist(壓縮列錶):當有序集合的元素個數小於list-max-ziplist-entries配置(默認128個)同時所有值都小於list-max-ziplist-value配置(默認64字節)時使用。ziplist使用更加緊凑的結構實現多個元素的連續存儲,更加節省內存。
skiplist(跳躍錶):當不滿足ziplist的要求時,會使用skiplist。
2、排行榜
用戶發布了n篇文章,其他人看到文章後給喜歡的文章點贊,使用score來記錄點贊數,有序集合會根據score排行。流程如下
用戶發布一篇文章a,初始點贊數為0,即score為0
zadd user:article 0 a
有人給文章a點贊,遞增1
zincrby user:article 1 a
查詢點贊前三篇文章
zrevrangebyscore user:article 0 2
查詢點贊後三篇文章
zrangebyscore user:article 0 2
六、Bitmap
七、HyperLogLog(基數)
八、Geospatial (地理空間索引)
九、Streams
边栏推荐
- SQLServer连接数据库(中文表)部分数据乱码问题解决
- Harmonyos application development -- mycalculator based on self-made grid layout [my calculator][api v6]
- Flink data flow graph, parallelism, operator chain, jobgraph and executiongraph, task and task slot
- When I saw the sudden death of a 28 year old employee, I wanted to moisten
- 创建线程的四种方式
- Flink deployment mode and runtime architecture (session mode, single job mode, application mode, jobmanager, taskmanager, yarn mode deployment and runtime architecture)
- 11、Synchronized与锁升级
- netstat 命令详解
- 中国网络安全年会周鸿祎发言:360安全大脑构筑数据安全体系
- General O & M structure diagram
猜你喜欢
随机推荐
yapi安装
纯数据业务的机器打电话进来时回落到了2G/3G
秒杀多级缓存-----商品详情页
Flink deployment mode and runtime architecture (session mode, single job mode, application mode, jobmanager, taskmanager, yarn mode deployment and runtime architecture)
Error occurred when MySQL imported the database data in pagoda as 0000-00-00 and enum as null
.net core 抛异常对性能影响的求证之路
Splunk健康检查orphaned searches
(解决)Splunk 之 kv-store down 问题
InputStream读取文件OutputStream创建文件
JMeter learning experience
14. Course summary and review
Wechat web developers, how to learn web development
How does data age in Splunk?
How can physical stores break through operational difficulties? Take a look at the store operation guide of this physical store applet
13. Explanation of reentrantlock, reentrantreadwritelock and stampedlock
flink 多流转换(侧输出流分流、Union、Connect) 实时对账app 的支付操作和第三方的支付操作的双流 Join
Some common websites
电商发展的演变
12. AQS of abstractqueuedsynchronizer
2、CompletableFuture









