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

waytohigh · May 09, 2018 · Last by waytohigh replied at May 12, 2018 · 1312 hits

数据类型是用户的在线状态,这个我想在 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 哟😂

Reply to hegwin

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

You need to Sign in before reply, if you don't have an account, please Sign up first.