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

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

  • 相关阅读:
    .net 网站登录
    .net controller 跳转到 controller
    c# 访问Mysql
    C#去除字符串的最后一个字符
    try catch
    MySqlDataReader
    转:十六进制颜色与RGB颜色对照表
    js:Razor视图下服务器代码给Javascript变量赋值
    .netMVC:Web页面向后台提交数据的方式和选择
    jquery方法
  • 原文地址:https://www.cnblogs.com/yjf512/p/3283293.html
Copyright © 2020-2023  润新知