Redis在SSM框架中最為快取
阿新 • • 發佈:2019-01-25
新增快取在view層和service層均可,建議在service層使用。在工作中,一般開放連線單機版,在上線時才真正連線叢集,為此我們也呈現兩種方式。但,無論哪種方式,都一樣,只不過xml配置不一樣;建立一個interface:
package com.aynu.redis.imp; import java.util.List; import com.aynu.redis.IRedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class Redis implements IRedis { //jedis連線池檔案 private JedisPool jedispool; public JedisPool getJedispool() { return jedispool; } public void setJedispool(JedisPool jedispool) { this.jedispool = jedispool; } @Override public String set(String key, String value) { // TODO Auto-generated method stub //從連線池中獲得一個連線 Jedis jedis=jedispool.getResource(); //直接操作redis String result = jedis.set(key, value); //關閉該連線 jedis.close(); return result; } @Override public String get(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); String result = jedis.get(key); jedis.close(); return result; } @Override public Boolean exists(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Boolean result = jedis.exists(key); jedis.close(); return result; } @Override public Long expire(String key, int seconds) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.expire(key, seconds); jedis.close(); return result; } @Override public Long ttl(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.ttl(key); return result; } @Override public Long incr(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } @Override public String hget(String key, String field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); String result = jedis.hget(key, field); jedis.close(); return result; } @Override public Long hdel(String key, String... field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.hdel(key, field); jedis.close(); return result; } @Override public Boolean hexistes(String key, String field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Boolean result = jedis.hexists(key, field); jedis.close(); return result; } @Override public List<String> hvals(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); List<String> result = jedis.hvals(key); jedis.close(); return result; } @Override public Long del(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.del(key); jedis.close(); return result; } @Override public Long hset(String key, String field, String value) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.hset(key, field, value); jedis.close(); return result; } } 2、建立一個spring-redis.xml檔案,進行配置: 3、在service層使用:策略:查詢時,先從redis中查,如果有,直接返回,沒有從資料庫中查,將查到的結果放到redis中
在查詢快取時,和新增快取時為了防止沒有查到報異常而影響整個系統的執行,我們採用try,catch方式進行捕獲;(1),注入上面的介面: ;
}catch (Exception e) {
// TODO: handle exception
}(3),如果快取中沒有,從資料庫中查,將結果放入:
一、連線單機版:1、建立class,整合上面的介面:public interface IRedis { 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); String hget(String key,String field); Long hset(String key, String field, String value); Long hdel(String key,String... field); Boolean hexistes(String key,String field); List<String> hvals(String key); Long del(String key); }
package com.aynu.redis.imp; import java.util.List; import com.aynu.redis.IRedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class Redis implements IRedis { //jedis連線池檔案 private JedisPool jedispool; public JedisPool getJedispool() { return jedispool; } public void setJedispool(JedisPool jedispool) { this.jedispool = jedispool; } @Override public String set(String key, String value) { // TODO Auto-generated method stub //從連線池中獲得一個連線 Jedis jedis=jedispool.getResource(); //直接操作redis String result = jedis.set(key, value); //關閉該連線 jedis.close(); return result; } @Override public String get(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); String result = jedis.get(key); jedis.close(); return result; } @Override public Boolean exists(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Boolean result = jedis.exists(key); jedis.close(); return result; } @Override public Long expire(String key, int seconds) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.expire(key, seconds); jedis.close(); return result; } @Override public Long ttl(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.ttl(key); return result; } @Override public Long incr(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } @Override public String hget(String key, String field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); String result = jedis.hget(key, field); jedis.close(); return result; } @Override public Long hdel(String key, String... field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.hdel(key, field); jedis.close(); return result; } @Override public Boolean hexistes(String key, String field) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Boolean result = jedis.hexists(key, field); jedis.close(); return result; } @Override public List<String> hvals(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); List<String> result = jedis.hvals(key); jedis.close(); return result; } @Override public Long del(String key) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.del(key); jedis.close(); return result; } @Override public Long hset(String key, String field, String value) { // TODO Auto-generated method stub Jedis jedis=jedispool.getResource(); Long result = jedis.hset(key, field, value); jedis.close(); return result; } } 2、建立一個spring-redis.xml檔案,進行配置:
<bean id="redis" class="com.aynu.redis.imp.Redis"> <property name="jedispool" ref="jedispool"/> </bean> <bean id="jedispool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.146.128"/> <constructor-arg name="port" value="6379"/> </bean>
在查詢快取時,和新增快取時為了防止沒有查到報異常而影響整個系統的執行,我們採用try,catch方式進行捕獲;(1),注入上面的介面:
@Autowired
private IRedis redis;
public IRedis getRedis() {
return redis;
}
public void setRedis(IRedis redis) {
this.redis = redis;
}
(2)、去快取中查詢:try {
//去快取中查,得到的是個json型別資料 String json = redis.hget("customer", "pageStartIndex"); //判斷是否為空,不為空將json轉為list
if(! json.isEmpty()) {
List<Customer> list=new ArrayList<Customer>();
list=JSONObject.parseArray(json, Customer.class);
}
return listredis.hset("customer", "pageStartIndex", customerdata); redis.hset("customer", "pageStartIndex", customerdata); redis.hset("customer", "pageStartIndex", customerdata);二、連線叢集:1、建立class,繼承介面:
package com.aynu.redis.imp;
import java.util.List;
import com.aynu.redis.IRedis;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class Cluster implements IRedis {
private JedisCluster jedisCluster;
public JedisCluster getJedisCluster() {
return jedisCluster;
}
public void setJedisCluster(JedisCluster jedisCluster) {
this.jedisCluster = jedisCluster;
}
@Override
public String set(String key, String value) {
// TODO Auto-generated method stub
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
// TODO Auto-generated method stub
return jedisCluster.get(key);
}
@Override
public Boolean exists(String key) {
// TODO Auto-generated method stub
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
// TODO Auto-generated method stub
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
// TODO Auto-generated method stub
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
// TODO Auto-generated method stub
return jedisCluster.incr(key);
}
@Override
public String hget(String key, String field) {
// TODO Auto-generated method stub
return jedisCluster.hget(key, field);
}
@Override
public Long hset(String key, String field, String value) {
// TODO Auto-generated method stub
return jedisCluster.hset(key, field, value);
}
@Override
public Long hdel(String key, String... field) {
// TODO Auto-generated method stub
return jedisCluster.hdel(key, field);
}
@Override
public Boolean hexistes(String key, String field) {
// TODO Auto-generated method stub
return jedisCluster.hexists(key, field);
}
@Override
public List<String> hvals(String key) {
// TODO Auto-generated method stub
return jedisCluster.hvals(key);
}
@Override
public Long del(String key) {
// TODO Auto-generated method stub
return jedisCluster.del(key);
}
}
2、在spring-redis.xml檔案中進行配置:<bean id="cluster" class="com.aynu.redis.imp.Cluster">
<property name="JedisCluster" ref="jedisCluster"/>
</bean>
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7001"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7002"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7003"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7004"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7005"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7006"/>
</bean>
</set>
</constructor-arg>
</bean>
3、使用同單機版注意:單機版和叢集版的切換,只在xml的配置進行即可。