Java高性能高并发实战之Redis封装类设计
2020-05-07 04:21
1261 查看
文章目录
前言
在我们的日常学习与项目中很多的地方也都是会使用到Redis,使用它做一个缓存的处理。我们都馋着他的性能和高效性,这节就来分装一个Redis来进行日常的使用。
正文
基础配置与封装
首先对于Redis的使用我们先要进行一个类似于MySql数据库的配置,在配置文件中写下如下的配置信息。
redis.host=localhost # 连接地址 redis.port=6379 #连接端口 redis.timeout=3 # 超时时间 redis.password=123456# 密码 redis.poolMaxTotal=10 redis.poolMaxIdle=10 redis.poolMaxWait=3
完成了配置文件的编写以后,因为我们想要将Redis封装成为一个可用类,所以需要将配置文件中的配置一一读取出来,就使用到了
@ConfigurationProperties(prefix="redis")表示读取到配置文件中以redis开头的配置信息。使用到
@Component注解表示将此对象实例化Spring容器中,这样就可以
@Autowired注解进行注入,。代码如下,同时生成get 和 set方法:
@Component @ConfigurationProperties(prefix="redis") public class RedisConfig { private String host; private int port; private int timeout;//秒 private String password; private int poolMaxTotal; private int poolMaxIdle; private int poolMaxWait;//秒 public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getPoolMaxTotal() { return poolMaxTotal; } public void setPoolMaxTotal(int poolMaxTotal) { this.poolMaxTotal = poolMaxTotal; } public int getPoolMaxIdle() { return poolMaxIdle; } public void setPoolMaxIdle(int poolMaxIdle) { this.poolMaxIdle = poolMaxIdle; } public int getPoolMaxWait() { return poolMaxWait; } public void setPoolMaxWait(int poolMaxWait) { this.poolMaxWait = poolMaxWait; } }
前面完成了对于基础的配置,我们也对Redis的基础配置进行了一个封装的处理,下面就可以开始将自己的配置注入到Bean中进行调用,使用到了
JedisPoolConfig,我们设置返回的对象为JedisPool,设置一个Jedis的工厂类,将自己之前封装好的内容注入到
JedisPoolConfig中,使用Bean注解即可。
@Service public class RedisPoolFactory { @Autowired RedisConfig redisConfig; @Bean public JedisPool JedisPoolFactory() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle()); poolConfig.setMaxTotal(redisConfig.getPoolMaxTotal()); poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000); JedisPool jp = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0); return jp; } }
完成了基础的分装以后就可以在RedisService中使用
@Autowired JedisPool jedisPool;
进行调用。
设置前缀防止键值的重复
在完成了以上的配置以后,我们就可以随意使用set与get进行测试处理,但是我们需要思考一个问题就是若是在多人开发的大项目中,对于Redis的需求是比较大的,在不同的部门中若是你定义了一个key为R1,但是对于另外一个部门的同时也定义了一个key为R1,这个时候就会出现覆盖的问题,所以我们需要进行思考,为给定的key值加上一个前缀,这个前缀是各个部门的部门名称。
用
getPrefix()来获取到传入的类的底层简称,这样就可以对于每一个部门都设置上不同的自己类的前缀
public String getPrefix() { String className = getClass().getSimpleName(); return className+":" + prefix; }
这个时候以上的配置都已经完成,现在我们来看一下对于Set的代码:
* */ public <T> T get(KeyPrefix prefix, String key, Class<T> clazz) { Jedis jedis = null; try { jedis = jedisPool.getResource(); //生成真正的key 前缀为自己部门的类的底层名称。 String realKey = prefix.getPrefix() + key; String str = jedis.get(realKey); T t = stringToBean(str, clazz); // 将String类型转换为T类型。 return t; }finally { returnToPool(jedis); } } private <T> T stringToBean(String str, Class<T> clazz) { if(str == null || str.length() <= 0 || clazz == null) { return null; } if(clazz == int.class || clazz == Integer.class) { return (T)Integer.valueOf(str); }else if(clazz == String.class) { return (T)str; }else if(clazz == long.class || clazz == Long.class) { return (T)Long.valueOf(str); }else { return JSON.toJavaObject(JSON.parseObject(str), clazz); } } private void returnToPool(Jedis jedis) { if(jedis != null) { jedis.close(); // 关闭连接。 } }
测试
首先进行set操作:
然后执行get操作:
使用RDM连接到本地的Redis数据库查看,name就是当前部门加id信息。
后记
对于这部分Redis的记录的源码部分已经上传到github上,后续的每部分的重点都会有具体的讲解。
源码跳转地址:地址链接
相关文章推荐
- Java高并发高性能编程设计模式实战分享
- 网盘分享Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,Redis,ActiveMQ,Nginx,Mycat,Netty,Jvm大型分布式项目实战视频教程
- Java高性能高并发实战之秒杀功能设计
- Java高并发高性能编程设计模式实战(最新最全)
- java架构师、集群、高可扩展、高性能、高并发、性能优化、Spring boot、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
- Java架构师,集群,高可用,高可扩 展,高性能,高并发,性能优化,Redis,ActiveMQ,Nginx,Mycat,Netty,Jvm大型分布 式项目实战
- 15套Java架构师,集群,高可用,高可扩 展,高性能,高并发,性能优化,Redis,ActiveMQ,Nginx,Mycat,Netty,Jvm大型分布 式项目实战视频教程
- 高级架构师JAVA,集群,高可用,高性能,高并发,性能优化,Redis,ActiveMQ,Nginx,Netty,Jvm大型分布 式项目实战视频
- 高级java高并发,高性能,分布式,高可用,负载均衡,系统架构实战
- Java秒杀系统方案优化 高性能高并发实战
- 2019新版《Java秒杀系统方案优化高性能高并发实战教程》
- Java秒杀系统方案优化---高性能高并发实战
- 2019Java秒杀系统方案优化 高性能高并发项目实战
- Java秒杀系统方案优化视频教程 Java高性能高并发实战教程
- 实战JAVA 高并发设计
- Redis 视频教程 大数据 高性能 集群 NoSQL 设计 实战 入门 命令
- Java高并发高性能分布式框架从无到有微服务架构设计
- Java 高并发第二阶段实战---高并发设计模式,内存模型,CPU一致性协议,volatile关键字剖析
- 分布式秒杀系统-REDIS(高并发、高性能、库存数据一致、非阻塞拒绝模式、不限语言-设计思路一致)
- 15套Java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm、Mecached、Nosql、Spring