• Redis 第五天


    一.Redis集群

    Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。通过分区来实现高可用,部分失效也可使用。

    1.设置集群

    /opt.redis-版本号/src

    2.此处设置一主一从最简单集群

    redis-cli --cluster create --cluster-replicas 1 192.168.11.101:6379 192.168.11.101:6380 192.168.11.101:6381 192.168.11.101:6389 192.168.11.101:6390 192.168.11.101:6391

    3.集群命令

    cluster nodes  查看集群信息

    redis-cli -c -p port 连接到集群

    set k1 v1 此处返回值为插槽号

    mset k1{user}v1 k2{user}v2         {组}集群中加入多个键

    cluster keyslot 获取k的插槽值

    cluster countkeysinslot    [插槽值] 只可查找属于自己范围插槽中的值

    cluster getkeysinslot 返回count个slot槽中的key

    4.故障恢复

    当主机断开后从机会上位成为主机

    之前的主机恢复连接后成为从机


    二.缓存穿透

    问题原因:key对应的数据源不存在,请求被压到数据库可能会压倒数据源。

                      redis 命中率降低 非正常url访问

    解决:1.对空值缓存(过期时间短)

              2.白名单(bitmaps)可访问(效率不高)

              3.布隆过滤器(底层bitmaps)

              4.进行实时监控:排查访问对象和访问数据

    三.缓存击穿

    问题原因:热门key过期,此时出现大量访问这个时候大并发的请求可能会瞬间把后端DB压垮。

    解决:1.预设热门key

               2.实时调整

               3.使用锁:在查询db时不让其他线程访问,直到缓存成功

    四.缓存雪崩

    问题原因:极少时间段内,大量key集中过期

    解决:1.加多级缓存 nginx+reids+...(ehcache)

              2.使用锁或队列 用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写(不适用于高并发)

              3.设置过期标志更新缓存

              4.缓存失效时间分散


  • 相关阅读:
    代码随想录训练营第III期--011--python
    【君正T31学习教程】002Toolchain使用说明
    Java虚拟机(JVM)解析:内存区域、类加载、垃圾回收和选型考虑
    时间管理:我需要利用好自己的时间
    Spring的注解开发-注解原理解析-xml方式/注解方式组件扫描
    如何在微服务中设计用户权限策略?
    【Spring Boot】操作Redis数据结构
    天玑9200领跑背后,高端芯片掀起蝴蝶效应
    Oracle数据库透明加密 安当加密
    【UE5】物体沿样条线移动
  • 原文地址:https://blog.csdn.net/qq_58679358/article/details/127458375