Redis key前缀的设计与使用
阅读目录
- 采用模板方法模式进行设计前缀空间
- RedisPrefixKey 接口
- RedisBasePrefixKey 抽象类
- UserKey 实现类(自定义)
- 改造RedisUtil工具类的方法
- 具体使用
- 参考
在Java web开发中,redis的使用已非常频繁了,大规模的使用也延伸了一些问题,例如:我定义了一个redis key name 存放的值为用户昵称,而这时同事定义一个key 也叫name,存放的是商品名字,那么冲突再所难免,为了解决这一问题,合理的设计redis key前缀 成为了迫切的需求。我们一起来看看优雅的设计吧!
采用模板方法模式进行设计前缀空间
接口------RedisPrefixKey
|
抽象类-----RedisBasePrefixKey
|
实现类 -----UserKey
RedisPrefixKey 接口
public interface RedisPrefixKey {/*** redis 过期时间* @return 过期时间*/Long getExpireSeconds();/*** redis key* @return 键前缀*/String getPrefix();
}
接口中定义了两个方法
- 获取redis key 的过期时间
getExpireSeconds()
- 获取redis 的key前缀
getPrefix()
RedisBasePrefixKey 抽象类
@Setter
@AllArgsConstructor
public abstract class RedisBasePrefixKey implements RedisPrefixKey {/*** 过期时间*/private Long expireSeconds;/*** redis key前缀*/private String prefix;/*** 构造器* expireSeconds 为零默认为永不过期** @param prefix 前缀*/public RedisBasePrefixKey(String prefix) {this.prefix = prefix;this.expireSeconds = 0L;}/*** 获取过期时间** @return*/@Overridepublic Long getExpireSeconds() {return expireSeconds;}/*** 获取Key前缀** @return*/@Overridepublic String getPrefix() {String className = getClass().getSimpleName();return className.concat(":").concat(prefix).concat(":");}
}
UserKey 实现类(自定义)
私有化构造器防止外面new创建
public class UserKey extends RedisBasePrefixKey{private UserKey(Long expireSeconds, String prefix) {super(expireSeconds, prefix);}private UserKey(String prefix){super(prefix);}public static final String USER_KEY_ID = "uid";/*** 用户key*/public static UserKey userId = new UserKey(USER_KEY_ID);}
最后生成的key是 UserKey:uid:1
模块:属性:值 == value
改造RedisUtil工具类的方法
/**** @param prefix 键前缀* @param key 键* @param value 值* @return true成功 false 失败*/
public boolean set(RedisPrefixKey prefix, String key, Object value) {try {long time = prefix.getExpireSeconds();if (time > 0) {redisTemplate.opsForValue().set(prefix.getPrefix().concat(key), value, time, TimeUnit.SECONDS);} else {set(prefix.getPrefix().concat(key), value);}return true;} catch (Exception e) {e.printStackTrace();return false;}
}/*** 普通缓存放入** @param key 键* @param value 值* @return true成功 false失败*/
public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}
}/*** 普通缓存获取** @param key 键* @return 值*/
public Object get(RedisPrefixKey prefix, String key) {return key == null ? null : redisTemplate.opsForValue().get(prefix.getPrefix().concat(key));
}
具体使用
//设置用户缓存
User user = userService.queryById(1);
redisUtil.set(UserKey.userId,user.getId()+"",user);
User u = (User)redisUtil.get(UserKey.getUserId,user.getId()+"");
System.out.println(u.toString());
参考
springboot-No4-3 集成redis 下 redis的key前缀空间引入
redis key前缀的设计与使用
Redis key前缀的设计与使用相关推荐
- 设计 Redis Key
分段设计法 使用冒号把 key 中要表达的多种含义分开表示,步骤如下: 把表名转化为 key 前缀 主键名(或其他常用于搜索的字段) 主键值 要存储的字段. eg. 用户表(user) id name ...
- 17 redis -key设计原则
书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8;insert into book val ...
- Redis入门——3.Redis key的设计技巧
Redis key的设计技巧 一,key设计原则 把表名转换为key前缀, 比如: tag: 第二段放置用于区分key的字段–对应mysql中的主键的列名 第三段放置主键值 第三段写列名 二,案例 用 ...
- redis根据前缀批量查找key
redis根据前缀批量查找key 众所周知,当redis中key数量越大,keys 命令执行越慢,而且最重要的会阻塞服务器,对单线程的redis来说,简直是灾难,且在生产环境,keys命令一般是被禁止 ...
- springboot 前缀_Springboot Redis设置key 前缀
springboot 连接redis 并设置key前缀 properties中配置 #redis redis.masterClusterNodes=10.40.57.197:7000;10.40.57 ...
- redis key设计技巧
1: 把表名转换为key前缀 如, user: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c ...
- 因 Redis Key 命令不规范,导致熬了一个通宵才把Key删完了!
来源:http://dwz.date/cmSG 前言 由于有一条业务线不理想,高层决定下架业务.对于我们技术团队而言,其对应的所有服务器资源和其他相关资源都要释放.释放了8台应用服务器: 1台es服务 ...
- redis key命名规范_公司内部 Redis 使用规范
前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...
- redis核心原理与设计思想
redis核心原理与设计思想 一.redis的5种基本数据结构 1.String(字符串) redis字符串扩容策略 2.list(列表) list常用命令 右边进左边出:队列 右边进右边出:栈 快速 ...
最新文章
- linux磁盘分区指令
- 20162304 实验三
- Java面向对象编程学习
- 计算机消失了一个磁盘,win7系统重装后莫名奇妙消失一个分区磁盘的解决方法...
- 【Java】基本语法训练题
- PHP date() 函数
- 生活过得很苦 不知道什么时候才能解脱
- 计算机用户系统软件,计算机软件系统
- 将mdf文件转化为excel
- 论文笔记:TrafficPredict: Trajectory Prediction for Heterogeneous Traffic-Agents
- 产品经理(Product Manager)相关英文术语
- 层次分析法(AHP)基础概念整理+步骤总结
- 蚂蚁金服面试及笔试(附自己的答案)
- 我们研究了853场世界杯比赛,发现了这几条稳赔不赚的竞猜攻略
- 在小树林飞也能又快又稳,这是港科大沈劭劼组的「猛禽」无人机重规划框架(这也符合我理想中的无人机,而且他们这说明这种室内避障无人机是可以做得很小的。)
- 高校教材管理系统mysql_高校教材管理系统的设计与实现
- 湖南省株洲市谷歌高清卫星地图下载
- day22【Properties、ResourceBundle工具类、缓冲流、转换流、序列化】课上
- 这6款功能强大、堪称良心的手机浏览器,还有谁不知道
- PHP 获取当前访问的URL