Redis 在大量数据中的存取

以前在公司的时候遇到了一个需求,要求将原本存储在结构化数据库中的数据部分使用Redis进行存取,用来提高服务的响应速度。

 而且还要求后端模块中的更新要有新旧两份,大意就是说当用户请求这部分数据的时候,若这部分数据正在更新,那么数据库应该返回旧版本的数据以保证服务能正常进行。当新数据更新完毕的时候,下一次用户请求的时候就是新数据。

因为Redis中是k-v形式,hash存储,所以当时的设计就是根据 模块名-表名-新/旧标识符-字段名 来作为key的前缀,在数据库存储新旧两份数据,启动的时候通过初始化确定当前使用的前缀,当更新的时候,使用新前缀插入数据,当插入结束后切换用户访问表名。(当然很可能会出现用户两次请求的数据会不一样,或者前后读取的数据一部分是新数据一部分是旧数据,导致计算结果错误)

这其中就遇到了一个问题,Redis大数据的存取,因为业务数据有数十万条,所以普通的存取方法会导致阻塞。

redis中的存原本是使用nodejs,使用set命令进行存的,但是后来发现有个更好的方法。

使用redis客户端的pipeline 。具体的可以看一下这个->https://www.cnblogs.com/huangxincheng/p/6212406.html

读取的时候也不可以使用 key * 来进行匹配前缀,因为这样会有很多的数据一起发回来,会造成阻塞。Redis提供了scan命令来解决这个问题。命令如:

scan (返回值) match (匹配前缀/形式) count (一次返回的记录条数)

然后通过迭代获取所有数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值