• 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.缓存失效时间分散


  • 相关阅读:
    CS5523/CS5518/MIPI接口转接芯片方案/替代IT6151
    半导体新能源智能装备整机软件系统方案设计
    一点感受
    编码注入
    第4周 一步步搭建多层神经网络以及应用(1 & 2)
    三面“有赞”Java岗斩获offer:Spring+JVM+并发锁+分布式+算法
    【openGauss】一主一备实现主备节点切换实验(switchover、failover)
    tailwindcss安装完插件代码不提示
    Spring Security权限控制系列
    将时间序列转成图像——马尔可夫转移场方法 Matlab实现
  • 原文地址:https://blog.csdn.net/qq_58679358/article/details/127458375