在spring中使用jedis 连接调试单机redis以及集群redis
来源:互联网 发布:知乎日报所有封面图 编辑:程序博客网 时间:2024/06/06 05:40
1.启动redis [root@nginx bin]# ./redis-server redis.conf
2.`
<!-- 配置redis客户端集群版 单机版和集群版的jedis只能存在一个 --><!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis01.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis01.real.cluster.client.port}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis02.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis02.real.cluster.client.port}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis03.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis03.real.cluster.client.port}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis04.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis04.real.cluster.client.port}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis05.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis05.real.cluster.client.port}"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="${redis06.real.cluster.client.host}"/> <constructor-arg name="port" value="${redis06.real.cluster.client.port}"/> </bean> </set> </constructor-arg></bean><bean id="jedisClientCluster" class="com.lee.rest.component.impl.JedisClientCluster"/> -->`
这是配置的redis-cli的连接池
然后定义一个接口,这个接口供两个类实现
一个是单机版,一个是集群版
有人会问为啥要2个类实现,因为redis的单机和集群都是不同的实现方法
一般在开发环境会使用单机版来做测试,生产环境直接上集群
fake cluster
redis.single.client.host=192.168.1.191
redis.single.client.port=6379
redis01.cluster.client.host=192.168.1.192
redis01.cluster.client.port=7001
redis02.cluster.client.host=192.168.1.192
redis02.cluster.client.port=7002
redis03.cluster.client.host=192.168.1.192
redis03.cluster.client.port=7003
redis04.cluster.client.host=192.168.1.192
redis04.cluster.client.port=7004
redis05.cluster.client.host=192.168.1.192
redis05.cluster.client.port=7005
redis06.cluster.client.host=192.168.1.192
redis06.cluster.client.port=7006
在你的资源文件中配好如上信息,供spring调用
说个题外话,资源文件*.properties,在spring的父子容器中不是公用的
也就是说,在service的spring容器中,只能配service层调用
在springMVC容器中只能被springmvc自己调用,因为资源文件不是夸容器的
而spring容器中的对象是可以被springMVC来访问的
但是springMVC的对象以及资源文件绝对不能被spring来访问,
举个栗子:你有见过service访问controller的吗?没有吧,哈哈
咱们先来建一个通用jedis客户端
package com.lee.rest.component;
/**
*
* @Title: JedisClient.java
* @Package com.lee.rest.component
* @Description: redis客户端
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:28:46
* @version V1.0
*/
public interface JedisClient {
public String set(String key, String value);public String get(String key);public Long hset(String key, String item, String value);public String hget(String key, String item);public Long hdel(String key, String item);public Long incr(String key);public Long decr(String key);/** * * @Description: 设置存存活时间 * @param key * @param second * @return * * @author leechenxiang * @date 2016年4月27日 下午4:34:35 */public Long expire(String key, int second);/** * * @Description: 判断key多久过期 * @param key * @return 秒 * >= 0 剩余秒数 * = -1 永久存活 * = -2 已经消除 * * @author leechenxiang * @date 2016年4月27日 下午4:34:22 */public Long ttl(String key);
}/**
*
* @Title: JedisClientSingle.java
* @Package com.lee.rest.component.impl
* @Description: 单机版的jedis客户端操作
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:36:42
* @version V1.0
*/
public class JedisClientSingle implements JedisClient {
@Autowiredprivate JedisPool jedisPool;@Overridepublic String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value); jedis.close(); return result;}@Overridepublic String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result;}@Overridepublic Long hset(String key, String item, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(key, item, value); jedis.close(); return result;}@Overridepublic String hget(String key, String item) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(key, item); jedis.close(); return result;}@Overridepublic Long hdel(String key, String item) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(key, item); jedis.close(); return result;}@Overridepublic Long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result;}@Overridepublic Long decr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.decr(key); jedis.close(); return result;}@Overridepublic Long expire(String key, int second) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, second); jedis.close(); return result;}@Overridepublic Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); jedis.close(); return result;}
}
/**
*
* @Title: JedisClientCluster.java
* @Package com.lee.rest.component.impl
* @Description: 集群版的jedis客户端操作
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:44:02
* @version V1.0
*/
public class JedisClientCluster implements JedisClient {
@Autowiredprivate JedisCluster jedisCluster;@Overridepublic String set(String key, String value) { return jedisCluster.set(key, value);}@Overridepublic String get(String key) { return jedisCluster.get(key);}@Overridepublic Long hset(String key, String item, String value) { return jedisCluster.hset(key, item, value);}@Overridepublic String hget(String key, String item) { return jedisCluster.hget(key, item);}@Overridepublic Long hdel(String key, String item) { return jedisCluster.hdel(key, item);}@Overridepublic Long incr(String key) { return jedisCluster.incr(key);}@Overridepublic Long decr(String key) { return jedisCluster.decr(key);}@Overridepublic Long expire(String key, int second) { return jedisCluster.expire(key, second);}@Overridepublic Long ttl(String key) { return jedisCluster.ttl(key);}
}
使用地方,一般都是在service中调用,把需要加缓存的地方都实现接口
取之前查询有没有缓存,有直接返回,没有查数据库,然后再放入缓存
也有企业会这么做,所有的缓存都有一个团队来管理,做一个定时器,每天凌晨固定一个时间点来跑批,把数据放入缓存
这么做也是可以的
我们采取的是第一种
PS:@Autowired 这边是用的类型相同,有人喜欢用@resource,这样的话就得多写一个,区别点
@Autowired
private JedisClient jedisClient;
@Value(“${REDIS_CONTENT_KEY}”)
private String REDIS_CONTENT_KEY;
@Override
public List gettList(Long id) {
// TODO 这个地方加缓存和不加缓存,单台或者集群的redis,都要进行压力测试
//添加缓存
//查询数据库之前先查询缓存,如果有直接返回
try {
//从redis中取缓存数据
String json = jedisClient.hget(REDIS_CONTENT_KEY, id + “”);
if (!StringUtils.isBlank(json)) {
//把json转换成List
List list = JsonUtils.jsonToList(json, Content.class);
return list;
}
} catch (Exception e) {
e.printStackTrace();
}
//执行查询
List<?> list = xxxMapper.select(id);
// 返回结果之前,向缓存中添加数据
try {
// 为了规范key可以使用hash
// 定义一个保存内容的key,hash中每个项就是cid
// value是list,需要把list转换成json数据。
jedisClient.hset(REDIS_CONTENT_KEY, id + “”, JsonUtils.objectToJson(list));
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
- 在spring中使用jedis 连接调试单机redis以及集群redis
- redis专题-9.Spring使用jedis调试单机redis以及集群redis
- jedis(redis)整合spring,包括jedis客户端单机版,jedis集群版配置 ,连接池配置
- jedis连接redis单机
- redis--jedis连接集群
- 使用jedis连接单机和集群redis的两种方式
- 使用Jedis连接集群Redis(支持Redis复杂操作)
- 使用Jedis连接Redis
- spring boot中使用redis -Jedis
- Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
- java代码中操作Redis:单机redis、集群redis(spring+redis集成)
- redis集群环境搭建以及java中jedis客户端集群代码实现 博客分类: redis
- redis集群环境搭建以及java中jedis客户端集群代码实现 博客分类: redis
- java使用jedis连接redis
- Redis-Jedis连接Redis
- Redis:使用jedis连接redis数据库过程
- Jedis访问redis集群以及crc16
- jedis 集群模式下连接redis原理
- AndroidStudio插件使用之:GsonFormat
- leetcode No84. Largest Rectangle in Histogram
- 安装Gazebo可能会遇到Error [Node.cc:90] No namespace found
- 类似拿乒乓球数问题的思考
- map的insert和下标[]访问的区别
- 在spring中使用jedis 连接调试单机redis以及集群redis
- Tomcat启动错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
- N个里面选k个的用法
- next_permutation实现原理
- TCP/IP学习
- iOS-图文表并茂,手把手教你GCD
- Java求职面试中那些棘手的线程问题
- Gradle build设置自动log开关
- AD补泪滴