redis的使用简记
Jedis的使用
思路:创建一个redis操作的接口。分别创建两个实现类对应redis的单机版和集群版。当使用单机版redis时,配置单机版的实现类,当使用集群版时,配置集群版实现类
单机版实现类:
注:jedis常用方法API可参见 https://blog.csdn.net/zhangguanghui002/article/details/78770071
/** * redis客户端单机版实现类 */ public class JedisClientSingle implements JedisClient{ @Autowired private JedisPool jedisPool; @Override public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value); jedis.close(); return result; } @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result; } @Override public Long hset(String key, String item, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(key, item, value); jedis.close(); return result; } @Override public String hget(String key, String item) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(key, item); jedis.close(); return result; } @Override public Long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } @Override public Long decr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.decr(key); jedis.close(); return result; } @Override public Long expire(String key, int second) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, second); jedis.close(); return result; } @Override public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); jedis.close(); return result; } }
集群版实现类:
/** * redis客户端集群版实现类 */ public class JedisClientCluster implements JedisClient { @Autowired private JedisCluster jedisCluster; @Override public String set(String key, String value) { return jedisCluster.set(key, value); } @Override public String get(String key) { return jedisCluster.get(key); } @Override public Long hset(String key, String item, String value) { return jedisCluster.hset(key, item, value); } @Override public String hget(String key, String item) { return jedisCluster.hget(key, item); } @Override public Long incr(String key) { return jedisCluster.incr(key); } @Override public Long decr(String key) { return jedisCluster.decr(key); } @Override public Long expire(String key, int second) { return jedisCluster.expire(key, second); } @Override public Long ttl(String key) { return jedisCluster.ttl(key); } }
Spring的配置:
<!-- 配置redis客户端单机版 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> </bean> <!-- 配置redis客户端实现类 --> <bean id="jedisClientSingle" class=" "/> <!-- 配置redis客户端集群版 --> <!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7001"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7002"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7003"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7004"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7005"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"/> <constructor-arg name="port" value="7006"/> </bean> </set> </constructor-arg> </bean> <bean id="jedisClientCluster" class=" "/> -->
业务逻辑中添加缓存:
@Override public List<TbContent> getContentList(Long cid) { //添加缓存 //查询数据库之前先查询缓存,如果有直接返回 try { //从redis中取缓存数据 String json = jedisClient.hget(REDIS_CONTENT_KEY, cid+""); if (!StringUtils.isBlank(json)) { //把json转换成List List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class); return list; } } catch (Exception e) { e.printStackTrace(); } // 根据cid查询内容列表 TbContentExample example = new TbContentExample(); Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqualTo(cid); //执行查询 List<TbContent> list = contentMapper.selectByExampleWithBLOBs(example); //返回结果之前,向缓存中添加数据 try { //为了规范key可以使用hash //定义一个保存内容的key,hash中每个项就是cid //value是list,需要把list转换成json数据。 jedisClient.hset(REDIS_CONTENT_KEY, cid+"", JsonUtils.objectToJson(list)); } catch (Exception e) { e.printStackTrace(); } return list; }
测试:
@Test public void testJedisClientSpring() throws Exception { //创建一个spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml"); //从容器中获得JedisClient对象 JedisClient jedisClient = applicationContext.getBean(JedisClient.class); //jedisClient操作redis jedisClient.set("cliet1", "1000"); String string = jedisClient.get("cliet1"); System.out.println(string); }

浙公网安备 33010602011771号