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

    redis主从遇到的两个坑

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

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

  • 相关阅读:
    面试题33:把数组排成最小的数
    面试题32:从1到n整数中1出现的次数
    面试题31:连续子数组的最大和
    HTTPS 及加密信息全解析
    面试题30:最小的k个数
    linux退出vi
    linux清除当前屏幕
    java web开发环境配置
    jQuery积累
    html5离线应用详摘
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3283811.html
Copyright © 2011-2022 走看看