当前位置: 首页 > news >正文

Redis 常见数据结构以及使用场景分析

Java面试题目录

Redis 常见数据类型以及使用场景分析

Redis中有string、list、hash、set、sorted set、bitmap这6种数据类型。

string可以用来做缓存,分布式锁,计数器等。

list可以实现消息队列,分页查询等。

hash适合存储对象结构。

set 可以轻易实现交集、并集、差集的操作。

sorted set比set增加了个权重字段,可以有序排列。通常用来设计排行榜。

bitmap存储的是一串二进制数字,可以实现布隆过滤器。

按照上面回答后可能会延伸的点:

1.如何实现分布式锁?

第一步:确定唯一标识。先针对当前业务定义个唯一标识,建议唯一标识前加上业务类型,比如用户要进行下订单操作,则可以用“ORDER:用户编码”作为唯一标识,避免同一用户连续下多个订单,也避免了受其他业务的影响。

第二步:尝试加锁。使用setnx命令设置KEY为“ORDER:用户编码”,值为新生成的UUID(释放锁时需要进行对比,避免因锁超时导致解锁错误),如果key已存在,设置失败返回0,表示加锁失败。key不存在时才能设置成功,返回1,表示加锁成功。

第三步:给锁加超时时间。使用expire命令给KEY加一个合适的超时时间,要大于自己业务代码执行时间。

第三步:释放锁。业务代码执行完毕后将锁释放出来,先使用get获取锁的UUID,与第二步生成的UUID进行对比,如果一致,则在finally中使用del直接删除此key。

 注意:第二步与第三步因为不是原子操作,可能出现第二步执行完后服务挂了,导致锁不会自动释放。避免这种情况的做法是使用LUA脚本,执行 “set key value ex 超时时间 nx”将第二步与第三步合并起来。回答时要提一下。

2.如何实现计数器?

decr自减,incr自增

相关文章:

  • JavaScript 异步编程解决方案-中篇
  • DrissionPage获取浏览器Network数据包
  • 【C++入门到精通】智能指针 [ C++入门 ]
  • gem5学习(11):将缓存添加到配置脚本中——Adding cache to the configuration script
  • 远程开发之vacode插件Remote - SSH
  • flutter 打包安卓apk 常用配置
  • Python数据结构——列表
  • androidkiller的两种异常情况
  • golang实现rpc方法一:使用net/rpc库【不能跨平台】
  • Java Swing 图书借阅系统 窗体项目 期末课程设计 窗体设计
  • 基本工具配置
  • 线程到底设置数量多少合适的探讨
  • 计算机网络(湖科大)第一章 概述
  • kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?
  • BIO、NIO、AIO 有什么区别?
  • vscode运行Python的两种方法,及无法运行的原因
  • 白嫖aws创建Joplin server服务器
  • C语言之数组与strlen与sizeof区别和应用
  • Poi实现根据word模板导出-图表篇
  • Redis面试题12
  • 王征、解宁元、牛恺任西安市副市长
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光
  • 李公明 | 一周画记:印巴交火会否升级为第四次印巴战争?
  • 母亲节|写给妈妈
  • “行人相撞案”现场视频公布,法院:表述不当造成误导
  • 中国社科院:网文市场超430亿元,作者破3000万人