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上触发上面两个条件,在从中就永远会被取到。。。

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

  • 相关阅读:
    掌门教育首通和续费文案整理
    python upload file遇到的坑,整理如下
    测试难题(转)
    敏捷测试与传统测试的区别
    质量体系
    幂等校验
    Charles常用功能整理
    测试难题
    敏捷测试与传统测试的区别
    质量体系
  • 原文地址:https://www.cnblogs.com/yjf512/p/3283293.html
Copyright © 2011-2022 走看看