新手问题 Redis 能否存储 non persistent data?

waytohigh · 2018年05月09日 · 最后由 waytohigh 回复于 2018年05月12日 · 1315 次阅读

数据类型是用户的在线状态,这个我想在 server 关闭后全部清空。查到几个做这个功能的例子用了 Redis 但没有解释 Redis 的 persistence 怎么处理,我之前在一个 non persistent model 上用过,发现Redis.new只是打开一个与 Redis 会话的通道而已,Redis 本身会 persist data to disk。这样在用户在线时打断 server,再启动会发现用户已经在线了,显然不对

查到 redis-server 层面是可以关掉 persistence 的,我假设这个是会全局地关闭 persistence,也许不是我想要的

假设 rails app 里有用 redis 做 persistent data 的 cache,想另开一个Redis.new专门用于存储用户在线状态,有无办法只关闭这个 Hash 的 persistence?或者也许可以在 config/initializer 里设置 server 启动时把该 Hash 清除来达到同样效果?具体该怎么做呢?

请赐教。谢谢

开多个 redis 实例储存不同持久化需求的数据。

redis.flushdb

看到在线状态,我第一反应是可以用 expire 设置键的过期时间…但是看到后面说是重启服务器,所以感觉这个不太符合。

一个 Redis 可以有很多个数据库,那你的问题可以这么解决:不修改 redis 的持久化策略,而是把在线状态写在某个特定数据库里,在服务器关闭或者启动时 flush 这个数据库,比如放到 initialiser 里面去运行 flushdb,嗯…不要用 flushall 哟😂

hegwin 回复

设置过期时间,然后每次 http request 再重置过期时间是吗?我这里是设想用 websockets 结合 hooks,不过我想 expire 可以在 websockets 终止后在 hooks 里触发,防止不同 websockets 连接接力时带来的抖动,以获得连贯的状态显示。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号