須要把jedis依賴的jar包添加到工程中。Maven工程中須要把jedis的座標添加到依賴。node
推薦添加到服務層。E3-content-Service工程中。redis
第一步:建立一個Jedis對象。須要指定服務端的ip及端口。spring
第二步:使用Jedis對象操做數據庫,每一個redis命令對應一個方法。數據庫
第三步:打印結果。緩存
第四步:關閉Jedis服務器
@Testapp public void testJedis() throws Exception {ide // 第一步:建立一個Jedis對象。須要指定服務端的ip及端口。測試 Jedis jedis = new Jedis("192.168.80.129", 6379);spa // 第二步:使用Jedis對象操做數據庫,每一個redis命令對應一個方法。 String result = jedis.get("hello"); // 第三步:打印結果。 System.out.println(result); // 第四步:關閉Jedis jedis.close(); } |
第一步:建立一個JedisPool對象。須要指定服務端的ip及端口。
第二步:從JedisPool中得到Jedis對象。
第三步:使用Jedis操做redis服務器。
第四步:操做完畢後關閉jedis對象,鏈接池回收資源。
第五步:關閉JedisPool對象。
@Test public void testJedisPool() throws Exception { // 第一步:建立一個JedisPool對象。須要指定服務端的ip及端口。 JedisPool jedisPool = new JedisPool("192.168.80.129", 6379); // 第二步:從JedisPool中得到Jedis對象。 Jedis jedis = jedisPool.getResource(); // 第三步:使用Jedis操做redis服務器。 jedis.set("jedis", "test"); String result = jedis.get("jedis"); System.out.println(result); // 第四步:操做完畢後關閉jedis對象,鏈接池回收資源。 jedis.close(); // 第五步:關閉JedisPool對象。 jedisPool.close(); } |
第一步:使用JedisCluster對象。須要一個Set<HostAndPort>參數。Redis節點的列表。
第二步:直接使用JedisCluster對象操做redis。在系統中單例存在。
第三步:打印結果
第四步:系統關閉前,關閉JedisCluster對象。
@Test public void testJedisCluster() throws Exception { // 第一步:使用JedisCluster對象。須要一個Set<HostAndPort>參數。Redis節點的列表。 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.80.129", 7001)); nodes.add(new HostAndPort("192.168.80.129", 7002)); nodes.add(new HostAndPort("192.168.80.129", 7003)); nodes.add(new HostAndPort("192.168.80.129", 7004)); nodes.add(new HostAndPort("192.168.80.129", 7005)); nodes.add(new HostAndPort("192.168.80.129", 7006)); JedisCluster jedisCluster = new JedisCluster(nodes); // 第二步:直接使用JedisCluster對象操做redis。在系統中單例存在。 jedisCluster.set("hello", "100"); String result = jedisCluster.get("hello"); // 第三步:打印結果 System.out.println(result); // 第四步:系統關閉前,關閉JedisCluster對象。 jedisCluster.close(); } |
經常使用的操做redis的方法提取出一個接口,分別對應單機版和集羣版建立兩個實現類。
public interface JedisClient {
String set(String key, String value); String get(String key); Boolean exists(String key); Long expire(String key, int seconds); Long ttl(String key); Long incr(String key); Long hset(String key, String field, String value); String hget(String key, String field); Long hdel(String key, String... field); } |
public class JedisClientPool 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 Boolean exists(String key) { Jedis jedis = jedisPool.getResource(); Boolean result = jedis.exists(key); jedis.close(); return result; }
@Override public Long expire(String key, int seconds) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, seconds); jedis.close(); return result; }
@Override public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); 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 hset(String key, String field, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(key, field, value); jedis.close(); return result; }
@Override public String hget(String key, String field) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(key, field); jedis.close(); return result; }
@Override public Long hdel(String key, String... field) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(key, field); jedis.close(); return result; }
} |
配置:applicationContext-redis.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util4.2.xsd">
<!-- 配置單機版的鏈接 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> </bean> <bean id="jedisClientPool" class="cn.e3mall.jedis.JedisClientPool"/>
</beans> |
package cn.e3mall.jedis;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisCluster;
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 Boolean exists(String key) { return jedisCluster.exists(key); }
@Override public Long expire(String key, int seconds) { return jedisCluster.expire(key, seconds); }
@Override public Long ttl(String key) { return jedisCluster.ttl(key); }
@Override public Long incr(String key) { return jedisCluster.incr(key); }
@Override public Long hset(String key, String field, String value) { return jedisCluster.hset(key, field, value); }
@Override public String hget(String key, String field) { return jedisCluster.hget(key, field); }
@Override public Long hdel(String key, String... field) { return jedisCluster.hdel(key, field); }
}
|
Spring的配置:
<!-- 集羣版的配置 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7005"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.80.129"></constructor-arg> <constructor-arg name="port" value="7006"></constructor-arg> </bean> </set> </constructor-arg> </bean> <bean id="jedisClientCluster" class="cn.e3mall.jedis.JedisClientCluster"/> |
注意:單機版和集羣版不能共存,使用單機版時註釋集羣版的配置。使用集羣版,把單機版註釋。
@Test public void testJedisClient() throws Exception { //初始化Spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml"); //從容器中得到JedisClient對象 JedisClient jedisClient = applicationContext.getBean(JedisClient.class); jedisClient.set("first", "100"); String result = jedisClient.get("first"); System.out.println(result);
} |
對內容信息作增刪改操做後只須要把對應緩存刪除便可。
能夠根據cid刪除。
@Override public E3Result addContent(TbContent content) { //補全屬性 content.setCreated(new Date()); content.setUpdated(new Date()); //插入數據 contentMapper.insert(content);
//緩存同步刪除 已經修改的數據 下次從數據庫中查詢 而不是直接從緩存中得到 jedisClient.hdel(CONTENT_KEY, content.getCategoryId().toString());
return E3Result.ok(); } |