jedis整合spring單機版和叢集版
1.1.1 Redis-cli
自帶客戶端。使用最多的。
1.1.1 圖形化介面客戶端
只支援單機版,不支援叢集。
1.1.1 Jedis客戶端
1.1.1.1 單機版
public class JedisTest { @Test public void testJedisSingle() { //建立一個jedis的物件。 Jedis jedis = new Jedis("192.168.25.153", 6379); //呼叫jedis物件的方法,方法名稱和redis的命令一致。 jedis.set("key1", "jedis test"); String string = jedis.get("key1"); System.out.println(string); //關閉jedis。 jedis.close(); } /** * 使用連線池 */ @Test public void testJedisPool() { //建立jedis連線池 JedisPool pool = new JedisPool("192.168.25.153", 6379); //從連線池中獲得Jedis物件 Jedis jedis = pool.getResource(); String string = jedis.get("key1"); System.out.println(string); //關閉jedis物件 jedis.close(); pool.close(); } }
1.1.1.1 叢集版
@Test public void testJedisCluster() { HashSet<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.25.153", 7001)); nodes.add(new HostAndPort("192.168.25.153", 7002)); nodes.add(new HostAndPort("192.168.25.153", 7003)); nodes.add(new HostAndPort("192.168.25.153", 7004)); nodes.add(new HostAndPort("192.168.25.153", 7005)); nodes.add(new HostAndPort("192.168.25.153", 7006)); JedisCluster cluster = new JedisCluster(nodes); cluster.set("key1", "1000"); String string = cluster.get("key1"); System.out.println(string); cluster.close(); }
1 業務邏輯中新增快取
需要在taotao-rest工程中新增快取。
1.1 jedis整合spring
1.1.1 單機版整合
1.1.1.1 配置
<!-- 連線池配置 -->
<bean id="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大連線數-->
<property name="maxTotal"value="30"/>
<!-- 最大空閒連線數 -->
<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>
<!-- jedis客戶端單機版 -->
<bean id="redisClient"class="redis.clients.jedis.JedisPool">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="6379"></constructor-arg>
<constructor-arg name="poolConfig"ref="jedisPoolConfig"></constructor-arg>
</bean>1.1.1.1 測試
/**
* 單機版測試
* <p>Title: testSpringJedisSingle</p>
* <p>Description: </p>
*/
@Test
public void testSpringJedisSingle() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
JedisPool pool = (JedisPool) applicationContext.getBean("redisClient");
Jedis jedis = pool.getResource();
String string = jedis.get("key1");
System.out.println(string);
jedis.close();
pool.close();
}
1.1.1 叢集版整合
1.1.1.1 配置
<bean id="redisClient" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7001"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host"value="192.168.25.153"></constructor-arg>
<constructor-arg name="port"value="7006"></constructor-arg>
</bean>
</set>
</constructor-arg>
<constructor-arg name="poolConfig"ref="jedisPoolConfig"></constructor-arg>
</bean>1.1.1.1 測試
@Test
public void testSpringJedisCluster() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
JedisCluster jedisCluster = (JedisCluster) applicationContext.getBean("redisClient");
String string = jedisCluster.get("key1");
System.out.println(string);
jedisCluster.close();
}
1.1 新增jedis dao
1.1.1 單機版
public class JedisClientSingle implements JedisClient{
@Autowired
private JedisPool jedisPool;
@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.get(key);
jedis.close();
return string;
}
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String string = jedis.set(key, value);
jedis.close();
return string;
}
@Override
public String hget(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.hget(hkey, key);
jedis.close();
return string;
}
@Override
public long hset(String hkey, String key, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(hkey, key, value);
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 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;
}
}
Spring配置檔案
1.1.1 叢集版
public class JedisClientCluster implements JedisClient {
@Autowired
private JedisCluster jedisCluster;
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
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);
}
}
1.1 把快取新增到業務邏輯
注意:快取的新增不能影響正常的業務邏輯。
@Override
public List<TbContent> getContentList(long contentCid) {
//從快取中取內容
try {
String result = jedisClient.hget(INDEX_CONTENT_REDIS_KEY, contentCid + "");
if (!StringUtils.isBlank(result)) {
//把字串轉換成list
List<TbContent> resultList = JsonUtils.jsonToList(result, TbContent.class);
return resultList;
}
} catch (Exception e) {
e.printStackTrace();
}
//根據內容分類id查詢內容列表
TbContentExample example = new TbContentExample();
Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(contentCid);
//執行查詢
List<TbContent> list = contentMapper.selectByExample(example);
//向快取中新增內容
try {
//把list轉換成字串
String cacheString = JsonUtils.objectToJson(list);
jedisClient.hset(INDEX_CONTENT_REDIS_KEY, contentCid + "", cacheString);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}