我的编程空间,编程开发者的网络收藏夹
学习永远不晚

16个Redis常见使用场景总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

16个Redis常见使用场景总结

2、数据共享分布式

String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享

例如:分布式Session 

  1. <dependency>   
  2.  <groupId>org.springframework.sessiongroupId>   
  3.  <artifactId>spring-session-data-redisartifactId>   
  4. dependency> 

3、分布式锁

String 类型setnx方法,只有不存在时才能添加成功,返回true 

  1. public static boolean getLock(String key) {  
  2.     Long flag = jedis.setnx(key, "1");  
  3.     if (flag == 1) {  
  4.         jedis.expire(key, 10);  
  5.     }  
  6.     return flag == 1;  
  7.  
  8. public static void releaseLock(String key) {  
  9.     jedis.del(key);  

4、全局ID

int类型,incrby,利用原子性

incrby userid 1000

分库分表的场景,一次性拿一段

5、计数器

int类型,incr方法

例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库

6、限流

int类型,incr方法

以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false

7、位统计

String类型的bitcount(1.6.6的bitmap数据结构介绍)

字符是以8位二进制存储的 

  1. set k1 a  
  2. setbit k1 6 1  
  3. setbit k1 7 0  
  4. get k1   
  5.  

例如:在线用户统计,留存用户统计 

  1. setbit onlineusers 01 
  2. setbit onlineusers 11   
  3. setbit onlineusers 20 

支持按位与、按位或等等操作 

  1. BITOPANDdestkeykey[key...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。    
  2. BITOPORdestkeykey[key...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。  
  3. BITOPXORdestkeykey[key...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。  
  4. BITOPNOTdestkeykey ,对给定 key 求逻辑非,并将结果保存到 destkey 。  

计算出7天都在线的用户 

  1. BITOP "AND" "7_days_both_online_users" "day_1_online_users" "day_2_online_users" ...  "day_7_online_users" 

8、购物车

String 或hash。所有String可以做的hash都可以做

  •  key:用户id;field:商品id;value:商品数量。
  •  +1:hincr。-1:hdecr。删除:hdel。全选:hgetall。商品数:hlen。

9、用户消息时间线timeline

list,双向链表,直接作为timeline就好了。插入有序

10、消息队列

List提供了两个阻塞的弹出操作:blpop/brpop,可以设置超时时间

  •  blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
  •  brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

上面的操作。其实就是java的阻塞队列。学习的东西越多。学习成本越低

  •  队列:先进先除:rpush blpop,左头右尾,右边进入队列,左边出队列
  •  栈:先进后出:rpush brpop

11、抽奖

自带一个随机获得值 

  1. spop myset 

12、点赞、签到、打卡

假如上面的微博ID是t1001,用户ID是u3001

用 like:t1001 来维护 t1001 这条微博的所有点赞用户

  •  点赞了这条微博:sadd like:t1001 u3001
  •  取消点赞:srem like:t1001 u3001
  •  是否点赞:sismember like:t1001 u3001
  •  点赞的所有用户:smembers like:t1001
  •  点赞数:scard like:t1001

是不是比数据库简单多了。另外,关注Java知音公众号,回复“后端面试”,送你一份面试题宝典!

13、商品标签

老规矩,用 tags:i5001 来维护商品所有的标签。

  •  sadd tags:i5001 画面清晰细腻
  •  sadd tags:i5001 真彩清晰显示屏
  •  sadd tags:i5001 流程至极

14、商品筛选 

  1. // 获取差集  
  2. sdiff set1 set2  
  3. // 获取交集(intersection )  
  4. sinter set1 set2  
  5. // 获取并集  
  6. sunion set1 set2 

假如:iPhone11 上市了 

  1. sadd brand:apple iPhone11  
  2. sadd brand:ios iPhone11  
  3. sad screensize:6.0-6.24 iPhone11  
  4. sad screentype:lcd iPhone 11 

筛选商品,苹果的、ios的、屏幕在6.0-6.24之间的,屏幕材质是LCD屏幕 

  1. sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd 

15、用户关注、推荐模型

follow 关注 fans 粉丝

相互关注:

  •  sadd 1:follow 2
  •  sadd 2:fans 1
  •  sadd 1:fans 2
  •  sadd 2:follow 1

我关注的人也关注了他(取交集):

  •  sinter 1:follow 2:fans

可能认识的人:

  •  用户1可能认识的人(差集):sdiff 2:follow 1:follow
  •  用户2可能认识的人:sdiff 1:follow 2:follow

16、排行榜

id 为6001 的新闻点击数加1:zincrby hotNews:20190926 1 n6001

获取今天点击最多的15条:zrevrange hotNews:20190926 0 15 withscores

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

16个Redis常见使用场景总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

16个Redis常见使用场景总结

本文介绍了16个Redis常见的使用场景总结。一起来看看吧。

16个 Redis 常见使用场景

本文代码示例虽然是java,但是不影响阅读,多熟悉下什么场景适合用redis,好的方案往往能起到事半功倍的效果。
Redis代码Java2024-12-03

利用PHP使用Redis常见的使用场景有哪些

这篇文章主要为大家展示了“利用PHP使用Redis常见的使用场景有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“利用PHP使用Redis常见的使用场景有哪些”这篇文章吧。简单字符串缓存实战$
2023-06-04

深入解析Redis中常见的应用场景

前言 Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景。下面话不多说了,来一起看看详细的介绍吧。 Redis特性一个产品的使
2022-06-04

超强Redis数据类型与应用场景总结!!!

Redis大部分时间用来做缓存,因为速度快(内存数据库,单线程,单进程,Redis 6.0支持多线程,后面我们会详细讲Redis 6.0的新特性 )。

JS使用Promise时常见的5个错误总结

Promise 提供了一种优雅的方法来处理 JS 中的异步操作。这也是避免“回调地狱”的解决方案。然而,并没有多少开发人员了解其中的内容。因此,许多人在实践中往往会犯错误。在本文中,介绍一下使用 promise 时的五个常见错误,希望大家能够避免
2022-11-13

这个使用场景,Etcd 比 Redis 强

Redis 非常强大,我出版过一本书专门介绍 Redis 的各种用法。但这并不是说 Redis 在各种方面都没有对手。至少在分布式系统的配置更新这个场景上面,我认为 etcd 做得更好。
EtcdRedis场景2024-12-02

redis五种数据结构及使用场景

redis 提供五种数据结构:字符串(存储简单数据)、哈希表(存储对象数据)、列表(存储消息队列)、集合(存储不重复元素)和有序集合(按评分存储排序元素)。Redis 的五种数据结构及使用场景Redis 是一种流行的键值存储数据库,它支持
redis五种数据结构及使用场景
2024-04-19

常见数据库介绍和使用场景

在构建系统时要进行设计考虑和权衡。1.介绍要选择正确的存储解决方案,需要以下考虑。关键因素数据结构查询模式您需要处理的数量或规模2.缓存解决方案如果您经常调用数据库或远程调用具有高延迟的独立服务,则可能需要[缓存](https://interviewdaemo
常见数据库介绍和使用场景
2018-03-25

五种Redis常见数据类型的使用场景及注意事项

可维护性是我们在实际开发系统时,需要认真考虑的的一个重要方面。它决定了系统修改、修复和更新的难易程度。只有当所有组件都得到良好维护并且软件项目没有什么不同时,系统才会以最佳方式运行。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录