redis 缓存用户账单策略
最近项目要求分页展示用户账单列表,为提高响应使用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 缓存用户账单策略的更多相关文章
- Redis缓存策略设计及常见问题
Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选 ...
- redis 缓存策略
redis 缓存策略配置项:maxmemory <bytes>maxmemory-policy noeviction 触发时机:每次执行命令(processCommand)的时候会检测 w ...
- Redis缓存Mysql模拟用户登录Java实现实例[www]
Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...
- 转:Redis 缓存策略
转:http://api.crap.cn/index.do#/web/article/detail/web/ARTICLE/7754a002-6400-442d-8dc8-e76e72d948ac 目 ...
- [技术博客] 用户验证码验证机制---redis缓存数据库的使用
目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...
- mysql+redis缓存策略常见的错误
什么时候应该更新缓存 应该是从数据库读取数据后,再更新缓存,从缓存读取到数据,就不需要再重新写缓存了,一个常见的错误是,每次访问接口都更新缓存,这样的话,如果接口一直有流量,那么db中的数据,就一直没 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题
问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...
- Spring Boot 使用Redis缓存
本文示例源码,请看这里 Spring Cache的官方文档,请看这里 缓存存储 Spring 提供了很多缓存管理器,例如: SimpleCacheManager EhCacheCacheManager ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...
随机推荐
- APP推送通知相关实现
关于推送通知,iOS推送主要是通过服务端来实现的,相关过程可以参考下面两篇文章: http://cshbbrain.iteye.com/blog/1859810 http://zxs198 ...
- 【BZOJ】2160: 拉拉队排练(Manacher)
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...
- Java 定义常量
转自:http://www.softservice.org.cn/html/zjbk/2012-8/7685.html 方法一采用接口(Interface)的中变量默认为static final的特性 ...
- Varnish,Nginx搭建缓存服务器
Varnish,Nginx搭建缓存服务器 一. varnish 1.安装pcre库,兼容正则表达式 # tar -zxvf pcre-8.10.tar.gz # cd pcre-8.10 # ./co ...
- NIO编程介绍
代码: package bhz.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio. ...
- 数字1的ASCII值是多少
ASCII表是计算机将字符转为数字存储的一张转换表.因此,只有字符才有ASCII值,数字是没有的. 答案:数字1没有ASCII值,数字1在计算机中就是按数值1存储的. 字符1的ASCII值是 49
- C#多线程学习-求和
1.代码如下 // *********************************************************************** // Assembly : Shar ...
- keepalived和zookeeper对比
https://blog.csdn.net/vtopqx/article/details/79066703keepalived与zookeeper都可以用来实现高可用,高可用一般跟负载均衡会一起考虑, ...
- go_常量与枚举
package main import ( "fmt" "math" ) //常量的数值可以作为各种类型使用 func consts(){ const file ...
- securecrt免密码登录
一.前言 1. 环境 客户端系统:win7 securecrt版本:6.0.2 服务端系统:centos6.5 服务端ssh实现:openssh 2. 关于认证方式 我们知道ssh一般都会提供多种客户 ...