共计 558 个字符,预计需要花费 2 分钟才能阅读完成。
redis 为什么那么快?
如何从海量 Key 里面查询出某一固定前缀的 key?
留意细节: 摸清楚数据规模, 问清楚边界
答:如果该机器是生产环境正在对外提供服务,不建议使用 keys * pattern 的方法进行查询,可能会使服务器卡顿,而出现事故。
一般生产服务器建议使用 Scan 命令,例如:SCAN 0 MATCH aaa* COUNT 5 表示从游标 0 开始查询 aaa 开头的 key,每次返回 5 条,但是这个 5 条不一定,只是给 Redis 打了个招呼,具体返回数量看 Redis 心情。
游标从 0 开始, 每执行一次游标会变并且返回, 然后继续拿着返回游标执行 Scan 命令, 最后游标如果返回 0, 则表明遍历结束, 所以可以用一个 hashset 去接受返回的元素, 最后获得全部元素, 不会出现卡顿。
如何通过 redis 实现分布式锁?
如何解决 setnx 长期有效的问题?
因为其他线程需要拿到锁, 所以要设置过期时间, 让 key 失效, 其它线程才能拿到锁
但是这样有一个缺陷(在设置时间那里如果出了问题), 就是设置 key, 和为 key 设置 key 的过期时间得不到满足, 这样的话也会导致释放不了锁
解决方案: 使用另外一个语法, 将设置 key 和时间绑定到了一起, 这样一来问题就得到了解决
如何解决大量的 key 同时过期的注意事项
设置时间加上随机值, 尽量使过期时间尽量分散一些, 这个问题就可以得到解决
正文完
发表至: java
2019-09-03