当前位置: 首页 > 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自增

http://www.lryc.cn/news/280255.html

相关文章:

  • LMDeploy 大模型量化部署实践
  • 15个为你的品牌增加曝光的维基百科推广方法-华媒舍
  • 启动redis出现Creating Server TCP listening socket 127.0.0.1:6379: bind: No error异常
  • 响应式编程Reactor优化Callback回调地狱
  • React项目实战--------极客园项目PC端
  • Jerry每次能向前或向后走n*n步(始终不能超过初始位置1e5),q(q <= 1e5)次询问,求向前走d最少要几次
  • 【Spring Boot 3】【Flyway】数据库版本管理
  • 蓝桥杯基础数据结构(java版)
  • 39 C++ 模版中的参数如果 是 vector,list等集合类型如何处理呢?
  • 5.Pytorch模型单机多GPU训练原理与实现
  • 想成为一名C++开发工程师,需要具备哪些条件?
  • Qat++,轻量级开源C++ Web框架
  • openssl3.2 - 官方demo学习 - digest - EVP_MD_demo.c
  • uniapp 编译后文字乱码的解决方案
  • iOS中利用KeyChain永久保存用户信息的方法示例
  • 基于时域有限差分法的FDTD的计算电磁学算法(含Matlab代码)-YEE网格下的更新公式推导
  • win10使用debug,汇编初学
  • 怎么投稿各大媒体网站?
  • chatgpt免费使用的网站
  • 音频编辑软件:Studio One 6 中文
  • MySQL语句|使用UNION和UNION ALL合并两个或多个 SELECT 语句的结果集
  • UNRAID 优盘制作
  • 二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】
  • 银行测试--------转账
  • 阿里云最新优惠券领取方法及优惠活动汇总
  • 动态分配内存的风险
  • 多行SQL转成单行SQL
  • wpf的资源路径
  • shell 脚本之一键部署安装 Nginx
  • 第01章_Java语言概述拓展练习(为什么要设置path?)