• 简谈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线程是安全的

    • Redis单进程单线程弊端:
      无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

    Redis与DB区别

    • 相同点:都是需要进行网络连接
    • 不同点:存放的介质为Redis内存,DB硬盘
    • 数据库需要做IO操作
    • 性能比直接操作内存效率要低

    高级特性

    1. 持久化机制
    2. 哨兵机制高可用
    3. 多种集群方案

    Redis应用场景

    1. 【令牌(Token)生成】

    2. 【短信验证码】

    3. 【发布订阅】,相当于消息系统,ActiveMQ,RocketMQ等工具类似,但是个人觉得简单用一下还行,如果对于数据一致性要求高的话还是用RocketMQ等专业系统。由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务 队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用

    4. 【分布式锁】

    5. 【验证前端的重复请求】(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交

    6. 【秒杀系统】,基于redis是单线程特征,防止出现数据库“爆破”

    7. 【全局增量ID生成】,类似“秒杀”

    8. 【计数器】 诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能!

    9. 【缓存(热点数据)】 热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用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的小小总结:

    - 五种数据结构
    - 缓存实际应用场景案例
    - 实现发布订阅
    - AOF与RDB存储原理分析
    - 管道模式与主从复制原理
    - 哨兵机制原理
    - 高可用架构实现
    - 集群方式cluster
    - 实现分布式锁
    - 读写分离
    - 防止redis雪崩和击穿
    - 哨兵模式与数据丢失问题
    - redis缓存与数据库同步问题解决方案
  • 相关阅读:
    利用docker搭建RTMP直播流服务器实现直播
    基于.NET平台的Ocelot网关框架教程汇总
    docker swarm集群搭建及使用Portainer、shipyard
    Swarm 集群并用 Portainer 管理
    如何在Debian 9上安装和使用Docker
    人不成熟的五大特征:立即要回报、不自律、经常被情绪所左右、不愿学习、做事情不靠信念靠人言(你中了几条?)
    使用 xpath helper 提取网页链接
    Python 爬虫js加密破解(四) 360云盘登录password加密
    Python 爬虫js加密破解(三) 百度翻译 sign
    Python 获得最近一个月的每天的日期
  • 原文地址:https://www.cnblogs.com/toov5/p/9884100.html
Copyright © 2020-2023  润新知