zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

NoSQL之Redis(五)--- Redis测试以及其与spring的集成

2023-09-14 09:01:02 时间
        // 创建一个jedis的对象。           Jedisjedis= newJedis("192.168.21.225", 6379);           // 调用jedis对象的方法,方法名称和redis的命令一致。           jedis.set("key1", "jedis test");           Stringstring= jedis.get("key1");           System.out.println(string);           // 关闭jedis。每次用完之后都应该关闭jedis           jedis.close();       }  

        测试结果入下:

        在实际的运用过程中,我们基本上不会这样每连接一次redis就去创建一个Jedis对象,而是会在程序加载的时候直接创建一个连接池。测试方法如下

  


      JedisPoolpool= newJedisPool("192.168.21.225", 6379);         // 从连接池中获得Jedis对象         Jedisjedis= pool.getResource();         Stringstring= jedis.get("key1");         System.out.println(string);         // 关闭jedis对象         jedis.close();         pool.close();     }  
    public void testJedisCluster() {           HashSet HostAndPort nodes= newHashSet ();           nodes.add(new HostAndPort("192.168.21.225",7001));           nodes.add(new HostAndPort("192.168.21.225",7002));           nodes.add(new HostAndPort("192.168.21.225",7003));           nodes.add(new HostAndPort("192.168.21.225",7004));           nodes.add(new HostAndPort("192.168.21.225",7005));           nodes.add(new HostAndPort("192.168.21.225",7006));           JedisClustercluster= newJedisCluster(nodes);           cluster.set("key1", "1000");           Stringstring= cluster.get("key1");           System.out.println(string);           cluster.close();       }  

        测试结果入下:

        通过上面的测试一方面我们知道了如何简单的去操作redis,另一方面也验证在之前介绍的redis的按照是没有问题的。

 

        与Spring的集成

        下面我们看看在spring的配置文件中如何配置redis的参数和Jedis相关的东西。


        连接池配置


        首先我们看看redis连接池的配置


         property name="maxIdle" value="10" /             !-- 每次释放连接的最大数目 --             property name="numTestsPerEvictionRun" value="1024" /             !-- 释放连接的扫描间隔(毫秒) --             property name="timeBetweenEvictionRunsMillis" value="30000" /             !-- 连接最小空闲时间 --             property name="minEvictableIdleTimeMillis" value="1800000" /             !-- 连接空闲多久后释放, 当空闲时间 该值 且 空闲连接 最大空闲连接数 时直接释放 --             property name="softMinEvictableIdleTimeMillis" value="10000" /             !-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 --             property name="maxWaitMillis" value="1500" /             !-- 在获取连接的时候检查有效性, 默认false --             property name="testOnBorrow" value="true" /             !-- 在空闲时检查有效性, 默认false --             property name="testWhileIdle" value="true" /             !-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --             property name="blockWhenExhausted" value="false" /         /bean   
bean id="redisClient"              constructor-arg name="host" value="192.168.21.225" /constructor-arg             constructor-arg name="port" value="6379" /constructor-arg             constructor-arg name="poolConfig" ref="jedisPoolConfig" /constructor-arg             bean id="jedisClient"  /         /bean   
                 bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7001" /constructor-arg                     /bean                     bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7002" /constructor-arg                     /bean                     bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7003" /constructor-arg                     /bean                     bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7004" /constructor-arg                     /bean                     bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7005" /constructor-arg                     /bean                     bean                          constructor-arg name="host" value="192.168.21.225" /constructor-arg                         constructor-arg name="port" value="7006" /constructor-arg                     /bean                 /set             /constructor-arg             constructor-arg name="poolConfig" ref="jedisPoolConfig" /constructor-arg         /bean         bean id="jedisClientCluster" /bean   


        为了方便笔者直接调用Jedis去操作redis,所以笔者写了一个JedisClient工具类,如下


 

        由于对单机和集群的redis操作时不一样的,所以实现工具类的时候单机和集群的实现方式是不一样的。


        单机实现


    public String set(String key, String value) {           Jedisjedis= jedisPool.getResource();           Stringstring= jedis.set(key, value);           jedis.close();           return string;       }       @Override       public String hget(String hkey, String key) {           Jedisjedis= jedisPool.getResource();           Stringstring= jedis.hget(hkey, key);           jedis.close();           return string;       }       @Override       public long hset(String hkey, String key, String value) {           Jedisjedis= jedisPool.getResource();           Longresult= jedis.hset(hkey, key, value);           jedis.close();           return result;       }       @Override       public long incr(String key) {           Jedisjedis= jedisPool.getResource();           Longresult= jedis.incr(key);           jedis.close();           return result;       }       @Override       public long expire(String key, int second) {           Jedisjedis= jedisPool.getResource();           Longresult= jedis.expire(key, second);           jedis.close();           return result;       }       @Override       public long ttl(String key) {           Jedisjedis= jedisPool.getResource();           Longresult= jedis.ttl(key);           jedis.close();           return result;       }       @Override       public long del(String key) {           Jedis jedis = jedisPool.getResource();           Longresult= jedis.del(key);           jedis.close();           return result;       }       @Override       public long hdel(String hkey, String key) {           Jedisjedis= jedisPool.getResource();           Longresult= jedis.hdel(hkey, key);           jedis.close();           return result;       }  
    public String set(String key, String value) {           return jedisCluster.set(key, value);       }       @Override       public String hget(String hkey, String key) {           return jedisCluster.hget(hkey, key);       }       @Override       public long hset(String hkey, String key, String value) {           return jedisCluster.hset(hkey, key, value);       }       @Override       public long incr(String key) {           return jedisCluster.incr(key);       }       @Override       public long expire(String key, int second) {           return jedisCluster.expire(key, second);       }       @Override       public long ttl(String key) {           return jedisCluster.ttl(key);       }       @Override       public long del(String key) {           return jedisCluster.del(key);       }       @Override       public long hdel(String hkey, String key) {           return jedisCluster.hdel(hkey, key);       }  
    public void testSpringJedisSingle(){           ApplicationContextapplicationContext = newClassPathXmlApplicationContext(                   "classpath:spring/applicationContext-*.xml");           JedisPoolpool= (JedisPool) applicationContext.getBean("redisClient");           Jedisjedis= pool.getResource();           Stringstring= jedis.get("key1");           System.out.println(string);           jedis.close();           pool.close();       }  
    public voidtestSpringJedisCluster() {           ApplicationContextapplicationContext = newClassPathXmlApplicationContext(                   "classpath:spring/applicationContext-*.xml");           JedisClusterjedisCluster= (JedisCluster) applicationContext                   .getBean("redisClient");           Stringstring= jedisCluster.get("key1");           System.out.println(string);           jedisCluster.close();       }  


        至此,本文的的写作目的——测试集群,以及redis配置与Spring集成就达到了。其实在笔者在写本文的时候,一方面是对之前项目中redis运用的优化,另一方面在实际的其实本文在实现JedisClient的时候,所有的方法中在笔者的项目中是添加有日志的。至于为什么添加日志本文就不介绍了。


利用Java来访问Redis并对Redis进行相关操作以及spring+redis集成配置与注解式注解 redis缓存的一些注意事项 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时较长的操作命令,如:keys * Redis默认配置中操作耗时超过10ms即视为慢查询 一个key对应的数据不应过大 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优hash类型,不应超过5000行
太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集 最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多bb了,直接上干货!
Spring boot整合Redis(入门教程) jedis:采用直连,多个线程操作的话,是不安全的。如果想要避免不安全的,使用jedis pool连接池!更像BIO模式 lettuce:采用netty,实例可以在多个线程中进行共享,不存在线程不安全的情况,可以减少线程数据,更像NIO模式
Spring boot整合Redis实现发布订阅(超详细) Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收信息。微信,微博,关注系统 Redis客户端可以订阅任意数量的频道
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载