最近项目要求分页展示用户账单列表,为提高响应使用redis做缓存,用到的缓存策略和大家分享一下。

  需求描述:展示用户账单基本信息以时间倒序排序,筛选条件账单类型(所有,订单收入、提现、充值...)。

账单信息分成两部分缓存:1.用户账单ID 列表;2.账单基本信息。先查询到用户账单ID 列表,再根据账单ID查询账单基本信息缓存

1.1.用户账单ID 列表(userBillIdListCache)

缓存数据类型:list;

key规范:   userBillList:userId:billtype

userId:用户ID,billtype:账单类型(所有,订单收入、提现、充值...) 即有多少个账单类型就有多收个用户账单ID 列表缓存 + 用户所有账单ID 列表缓存

value:用户账单ID(时间倒序)

同一个用户选择不同的账单类型命中不同的账单ID列表缓存。

1.2.账单基本信息(billCache)

缓存数据类型:hash;

key规范:   bill:billId;

方便维护

在接口中应用:

1.1.分页查询用户账单列表:

参数:userId,billtype,pageNo,pageSize

返回值:returnList

根据userId,billtype查询缓存userBillIdListCache

if(null==userBillIdListCache){

  数据库查询 userBillList  (select  .... Bill_DB  where userId and billtype  order by createTime desc ;)

缓存userBillList  :userBillIdListCache,billCache

分页处理 returnList

}

else{//userBillIdListCache存在

分页取 billIdList

通过账单ID取billCache 组装 returnList

}

2.2.新增账单

根据userId,billtype查询缓存userBillIdListCache 和 用户所有账单ID 列表缓存

if(null!=userBillIdListCache){//userBillIdListCache存在

  添加新账单ID到userBillIdListCache (lpush userBillIdListCache  billId);

缓存账单基本信息billCache;

}

2.3.修改账单信息

根据billId 查询是否存在缓存 billCache 如果存在修改 billCache 内容

if  hexists bill:billId

HMSET bill:billId status 1 statusName 提现成功

ps:对缓存操作的方法单独抽出来,这里没有单独写,根据具体情况设置缓存生命周期。

redis 缓存用户账单策略的更多相关文章

  1. Redis缓存策略设计及常见问题

    Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选 ...

  2. redis 缓存策略

    redis 缓存策略配置项:maxmemory <bytes>maxmemory-policy noeviction 触发时机:每次执行命令(processCommand)的时候会检测 w ...

  3. Redis缓存Mysql模拟用户登录Java实现实例[www]

    Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...

  4. 转:Redis 缓存策略

    转:http://api.crap.cn/index.do#/web/article/detail/web/ARTICLE/7754a002-6400-442d-8dc8-e76e72d948ac 目 ...

  5. [技术博客] 用户验证码验证机制---redis缓存数据库的使用

    目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...

  6. mysql+redis缓存策略常见的错误

    什么时候应该更新缓存 应该是从数据库读取数据后,再更新缓存,从缓存读取到数据,就不需要再重新写缓存了,一个常见的错误是,每次访问接口都更新缓存,这样的话,如果接口一直有流量,那么db中的数据,就一直没 ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题

    问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...

  8. Spring Boot 使用Redis缓存

    本文示例源码,请看这里 Spring Cache的官方文档,请看这里 缓存存储 Spring 提供了很多缓存管理器,例如: SimpleCacheManager EhCacheCacheManager ...

  9. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...

随机推荐

  1. 微信APP支付整体流程记录备忘

      支付整体流程见文档:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3   商户系统和微信支付系统主要交互说明:     步骤1: ...

  2. 【UVALive】3905 Meteor(扫描线)

    题目 传送门:QWQ 分析 扫描线搞一搞. 按左端点排序,左端点相同时按右端点排序. 如果是左端点就$ cnt++ $,否则$ cnt-- $ 统计一下$ Max $就行了 代码 #include & ...

  3. cloudera manager卸载流程

    注意:卸载Cloudera Manager后,根据需要保留或者删除集群中的Hadoop数据.下面的命令没有删除Hadoop数据,可以在控制台的Hadoop 和MapReduce /配置/选项卡,查看H ...

  4. 逻辑IO及当前模式读和一致性读的总结杂记

    逻辑IO 逻辑读(确切是指db get之read不是consistentget之read):就是服务器进程从SGA上的buffercache(高速缓存)区域(先)根据SQL语句解析过程所获得的要操作的 ...

  5. django之设置分页

    分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...

  6. 本地YUM仓库搭建实战

    YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软 ...

  7. [Z] 用GDB调试程序

    原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工 ...

  8. 「小程序JAVA实战」小程序的表单组件(25)

    转自:https://idig8.com/2018/08/18/xiaochengxujavashizhanxiaochengxudebiaodanzujian25/ 来说下 ,小程序的基础组件.源码 ...

  9. web开发-CORS支持

    一.简介 Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 1.1.CORS与JSONP相比 1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求 ...

  10. Shiro session和Spring session一样吗?

    出自:https://yq.aliyun.com/articles/114167?t=t1 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢 ...