阅读目录

  • 采用模板方法模式进行设计前缀空间
  • 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前缀的设计与使用相关推荐

  1. 设计 Redis Key

    分段设计法 使用冒号把 key 中要表达的多种含义分开表示,步骤如下: 把表名转化为 key 前缀 主键名(或其他常用于搜索的字段) 主键值 要存储的字段. eg. 用户表(user) id name ...

  2. 17 redis -key设计原则

    书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8;insert into book val ...

  3. Redis入门——3.Redis key的设计技巧

    Redis key的设计技巧 一,key设计原则 把表名转换为key前缀, 比如: tag: 第二段放置用于区分key的字段–对应mysql中的主键的列名 第三段放置主键值 第三段写列名 二,案例 用 ...

  4. redis根据前缀批量查找key

    redis根据前缀批量查找key 众所周知,当redis中key数量越大,keys 命令执行越慢,而且最重要的会阻塞服务器,对单线程的redis来说,简直是灾难,且在生产环境,keys命令一般是被禁止 ...

  5. springboot 前缀_Springboot Redis设置key 前缀

    springboot 连接redis 并设置key前缀 properties中配置 #redis redis.masterClusterNodes=10.40.57.197:7000;10.40.57 ...

  6. redis key设计技巧

    1: 把表名转换为key前缀 如, user: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c ...

  7. 因 Redis Key 命令不规范,导致熬了一个通宵才把Key删完了!

    来源:http://dwz.date/cmSG 前言 由于有一条业务线不理想,高层决定下架业务.对于我们技术团队而言,其对应的所有服务器资源和其他相关资源都要释放.释放了8台应用服务器: 1台es服务 ...

  8. redis key命名规范_公司内部 Redis 使用规范

    前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...

  9. redis核心原理与设计思想

    redis核心原理与设计思想 一.redis的5种基本数据结构 1.String(字符串) redis字符串扩容策略 2.list(列表) list常用命令 右边进左边出:队列 右边进右边出:栈 快速 ...

最新文章

  1. linux磁盘分区指令
  2. 20162304 实验三
  3. Java面向对象编程学习
  4. 计算机消失了一个磁盘,win7系统重装后莫名奇妙消失一个分区磁盘的解决方法...
  5. 【Java】基本语法训练题
  6. PHP date() 函数
  7. 生活过得很苦 不知道什么时候才能解脱
  8. 计算机用户系统软件,计算机软件系统
  9. 将mdf文件转化为excel
  10. 论文笔记:TrafficPredict: Trajectory Prediction for Heterogeneous Traffic-Agents
  11. 产品经理(Product Manager)相关英文术语
  12. 层次分析法(AHP)基础概念整理+步骤总结
  13. 蚂蚁金服面试及笔试(附自己的答案)
  14. 我们研究了853场世界杯比赛,发现了这几条稳赔不赚的竞猜攻略
  15. 在小树林飞也能又快又稳,这是港科大沈劭劼组的「猛禽」无人机重规划框架(这也符合我理想中的无人机,而且他们这说明这种室内避障无人机是可以做得很小的。)
  16. 高校教材管理系统mysql_高校教材管理系统的设计与实现
  17. 湖南省株洲市谷歌高清卫星地图下载
  18. day22【Properties、ResourceBundle工具类、缓冲流、转换流、序列化】课上
  19. 这6款功能强大、堪称良心的手机浏览器,还有谁不知道
  20. PHP 获取当前访问的URL

热门文章

  1. ArcGIS制作栅格动图
  2. 蓝牙耳机录音进行讯飞语音识别
  3. 趣图:代码突然又可以运行了,why?
  4. java ftp文件大小_java如何获得ftp服务器上指定文件的大小
  5. 苹果xsmax怎么开机_苹果xsmax触屏不灵敏,xsmax触屏失灵怎么回事
  6. 怎样在电脑上录制ppt课件?如何录制课件讲解视频
  7. 每天一道大厂SQL题【Day01】
  8. 大声说出我爱你——寒假英语学习总结
  9. VBS实现的日程提醒小工具
  10. php 数字转大写人民币