什么是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常见应用场景相关推荐

  1. redis常见使用场景与实例

    问题(需求): 项目中一些常见问题 1.多节点用户会话保存 2.订单大规模定时取消 3.产品服务访问慢 4.分布式任务重复执行 5.高并发提交:设备状态上报接口 接口高并发 /*** 接到上报* 1* ...

  2. 16 个 Redis 常见使用场景

    作者 | 菜鸟编程98K 来源 | https://blog.csdn.net/qq_39938758/article/details/105577370 1.缓存 String类型 例如:热点数据缓 ...

  3. Redis学习总结(8)——Redis常见使用场景总结

    1.缓存 在目前的互联网网站中,缓存几乎是网站都在用的,合理的使用缓存不但可以提升网站访问速度,还可以大大降低数据库的压力.Redis不仅提供了键过期功能,也提供了灵活的键淘汰策略,而且拥有相比mem ...

  4. 16个 Redis 常见使用场景

    目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞.签到.打卡 商品标签 商品筛选 用户关注.推荐模型 排行榜 1.缓存 ...

  5. Redis 常见使用场景

    常用命令说明 1.String 适合简单的key,value存储结构,类似于之前使用过的cache,memcached的存储结构.应用场景:短信验证码,配置信息等. 常用命令: 1.1 incr:自增 ...

  6. 16个Redis常见使用场景总结

    五年从程序员到架构师!这是我见过史上最好的程序员职业规划 (下一篇) 16 条 yyds 的代码规范 40 个 SpringBoot 常用注解 别慌,在Java面试的时候,面试官会这样问关于框架的问题 ...

  7. redis常见使用场景下PHP实现

    基于redis字符串string类型的简单缓存实现 <?php //简单字符串缓存$redis = new \Redis(); $redis->connect('127.0.0.1',63 ...

  8. Redis 16 个常见使用场景

    1. 缓存 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存.而使用 Redis 缓存数据非常简单,只需要通过string类型将序列化后的对象存起来即可,不过 ...

  9. 【面试经典】redis 常见数据结构以及使用场景分析

    1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...

最新文章

  1. 一个用于分页的page类
  2. android开发使用c+_如何在Android项目中开始使用C ++代码
  3. Linux无法连接远程仓库,ssh无法连接到远端Ubuntu的解决方法
  4. Java 数组获取最大值和最小值
  5. matlab trapz二重积分函数_matlab二重积分
  6. centos 防火墙
  7. TCP服务端开发为例--web开发不同url请求为何会走不同方法
  8. 【IOS捷径】获取时间戳
  9. 是德科技N9020A 频谱分析仪技术资料说明
  10. 国赛培训——规划论——线性规划
  11. linux ikev1切换到ikev2,IKEv2与IKEv1的差异.doc
  12. 单库单表到多库多表的全量复制方案
  13. SQL实现 模糊查询
  14. 互联网贷款大数据风控能做到什么程度?
  15. python 文件名批量修改、重命名
  16. 0918 iOS10兼容/iOS系统过高或过低配置包/混合引擎的在线视频连麦互动直播/源码管理工具/Xcode8插件升级/导航栏渐变
  17. IEEE 802.11 无线局域网络 (Wireless LAN)
  18. Python_pymysql
  19. 基于硬件方法的“熔断”和“幽灵”CPU 漏洞应对机制!
  20. 开源SNS(社会性网络服务)软件iweb SNS v0.7源码下载

热门文章

  1. input文本框设置和移除默认值
  2. js 控制浏览器窗口大小
  3. POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)
  4. Java虚拟机 —— 运行时数据区
  5. IDC:2015年全球专用备份一体机市场稳健增长
  6. 11. mysqli 学习
  7. 分布式缓存memcached
  8. CentOS YUM / RPM Error Signature Key ID BAD
  9. Jacoco的原理(各个覆盖率的解释)
  10. 不使用 Ruby 的十个理由