zoukankan      html  css  js  c++  java
  • redis主从遇到的两个坑

    最近在使用redis主从的时候做了下面两件事情:

    1 希望redis主从从操作上分析,所有写操作都在master上写,所有读操作都在从上读。

    2 由于redis的从是放在本地的,所以有的key的读写操作就直接放在从上操作了。

    但是出现了下面的几个问题:

    1 在主上setex的key即使过期后在从上也始终get的到。

    重现:

    主: setex abc 20 test

    从:

    get abc >> test

    ttl abc >> 18

    ...

    ttl abc >> -1

    get abc >> test (这里竟然还有~!)

    主:get  abc >> nil

    从:get abc >> nil

    所以如果只在从上获取一个key需要根据get+ttl来判断一个key是否已经过期

    查了下,也有人吐槽这个问题:http://code.google.com/p/redis/issues/detail?id=519

    2 在从上进行读写操作,过期时间不生效

    重现:

    redis 127.0.0.1:6379> get abctest
    (nil)
    redis 127.0.0.1:6379> setex abctest 20 test
    OK
    redis 127.0.0.1:6379> get abctest
    "test"
    redis 127.0.0.1:6379> ttl abctest
    (integer) 10
    redis 127.0.0.1:6379> ttl abctest
    (integer) -1
    redis 127.0.0.1:6379> get abctest
    "test"  (这里竟然还取得出来。。)

    分析

    这个现象就是像说从从来不负责删除key,删除key只是主负责的。而由于redis自身删除key的机制是

    1 随机选取一定比例的过期key

    2 get触发过期删除。

    所以导致在master上设置了过期的key如果不在master上触发上面两个条件,在从中就永远会被取到。。。

    这真是个很容易踩到的坑啊。。。

  • 相关阅读:
    php读取大文件如日志文件
    大型站点高并发架构技术
    Nginx配置文件nginx.conf详细说明文档
    关于PHP高并发抢购系统设计
    Mysql常用的锁机制
    Sping基础
    Reliable Master持续集成环境搭建Centos
    Win7 macaca自动化环境搭建 PC篇
    安卓appium无线调试
    Selenium PageFactory使用
  • 原文地址:https://www.cnblogs.com/yjf512/p/3283293.html
Copyright © 2011-2022 走看看