redis常见应用场景
什么是Redis
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps
Redis单线程好处
代码更清晰,处理逻辑更简单
不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
不存在多进程或者多线程导致的切换而消耗CPU
所以redis线程是安全的
单进程单线程弊端
无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;
Redis应用场景
令牌(Token)生成
短信验证码
发布订阅
相当于消息系统,ActiveMQ,RocketMQ等工具类似,但是个人觉得简单用一下还行,如果对于数据一致性要求高的话还是用RocketMQ等专业系统。
由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务
队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用
分布式锁
验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交
秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
全局增量ID生成,类似“秒杀”
计数器
诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能!
缓存(热点数据)
热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。
结合具体应用需要注意一下:很多人用spring的AOP来构建redis缓存的自动生产和清除,过程可能如下:
Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,然后将数据插入redis
update或者delete数据库钱,查询redis是否存在该数据,存在的话先删除redis中数据,然后再update或者delete数据库中的数据
上面这种操作,如果并发量很小的情况下基本没问题,但是高并发的情况请注意下面场景:
为了update先删掉了redis中的该数据,这时候另一个线程执行查询,发现redis中没有,瞬间执行了查询SQL,并且插入到redis中一条数据,回到刚才那个update语句,这个悲催的线程压根不知道刚才那个该死的select线程犯了一个弥天大错!于是这个redis中的错误数据就永远的存在了下去,直到下一个update或者delete。
redis常见应用场景相关推荐
- redis常见使用场景与实例
问题(需求): 项目中一些常见问题 1.多节点用户会话保存 2.订单大规模定时取消 3.产品服务访问慢 4.分布式任务重复执行 5.高并发提交:设备状态上报接口 接口高并发 /*** 接到上报* 1* ...
- 16 个 Redis 常见使用场景
作者 | 菜鸟编程98K 来源 | https://blog.csdn.net/qq_39938758/article/details/105577370 1.缓存 String类型 例如:热点数据缓 ...
- Redis学习总结(8)——Redis常见使用场景总结
1.缓存 在目前的互联网网站中,缓存几乎是网站都在用的,合理的使用缓存不但可以提升网站访问速度,还可以大大降低数据库的压力.Redis不仅提供了键过期功能,也提供了灵活的键淘汰策略,而且拥有相比mem ...
- 16个 Redis 常见使用场景
目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞.签到.打卡 商品标签 商品筛选 用户关注.推荐模型 排行榜 1.缓存 ...
- Redis 常见使用场景
常用命令说明 1.String 适合简单的key,value存储结构,类似于之前使用过的cache,memcached的存储结构.应用场景:短信验证码,配置信息等. 常用命令: 1.1 incr:自增 ...
- 16个Redis常见使用场景总结
五年从程序员到架构师!这是我见过史上最好的程序员职业规划 (下一篇) 16 条 yyds 的代码规范 40 个 SpringBoot 常用注解 别慌,在Java面试的时候,面试官会这样问关于框架的问题 ...
- redis常见使用场景下PHP实现
基于redis字符串string类型的简单缓存实现 <?php //简单字符串缓存$redis = new \Redis(); $redis->connect('127.0.0.1',63 ...
- Redis 16 个常见使用场景
1. 缓存 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存.而使用 Redis 缓存数据非常简单,只需要通过string类型将序列化后的对象存起来即可,不过 ...
- 【面试经典】redis 常见数据结构以及使用场景分析
1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...
最新文章
- 一个用于分页的page类
- android开发使用c+_如何在Android项目中开始使用C ++代码
- Linux无法连接远程仓库,ssh无法连接到远端Ubuntu的解决方法
- Java 数组获取最大值和最小值
- matlab trapz二重积分函数_matlab二重积分
- centos 防火墙
- TCP服务端开发为例--web开发不同url请求为何会走不同方法
- 【IOS捷径】获取时间戳
- 是德科技N9020A 频谱分析仪技术资料说明
- 国赛培训——规划论——线性规划
- linux ikev1切换到ikev2,IKEv2与IKEv1的差异.doc
- 单库单表到多库多表的全量复制方案
- SQL实现 模糊查询
- 互联网贷款大数据风控能做到什么程度?
- python 文件名批量修改、重命名
- 0918 iOS10兼容/iOS系统过高或过低配置包/混合引擎的在线视频连麦互动直播/源码管理工具/Xcode8插件升级/导航栏渐变
- IEEE 802.11 无线局域网络 (Wireless LAN)
- Python_pymysql
- 基于硬件方法的“熔断”和“幽灵”CPU 漏洞应对机制!
- 开源SNS(社会性网络服务)软件iweb SNS v0.7源码下载