springmvc集成使用redis過(guò)程
Redis安裝
首先安裝redis。這個(gè)就不重點(diǎn)介紹了。windos下載redis就行。
我用的是mac
用命令行安裝的。
安裝命令
yum install redis
運(yùn)行命令
sudo redis-server
這樣就安裝運(yùn)行成功了。
spring集成redis
首先你需要下載驅(qū)動(dòng)包,下載 jedis.jar,確保下載最新驅(qū)動(dòng)包。然后導(dǎo)包。
在spring配置文件里我這是ApplicationContext .xml文件添加
<!-- 引入同文件夾下的redis屬性配置文件 --> <import resource="spring-redis.xml" />
然后用創(chuàng)建spring-redis.xml文件
寫入
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 緩存的層級(jí)--> <context:component-scan base-package="com.niit.cache" /> <!-- 引入redis配置 --> <context:property-placeholder location="/WEB-INF/classes/redis.properties" ignore-unresolvable="true"/> <!-- Redis 配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}" /> <property name="maxIdle" value="${redis.pool.maxIdle}" /> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" /> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /> </bean> <!-- JedisCluster 集群高可用配置 --> <!--<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg index="0"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip1}" /> <constructor-arg index="1" value="${redis.port1}" type="i
public class RedisCache { public final static String CAHCENAME = "niitcache";// 緩存名 public final static int CAHCETIME = 60;// 默認(rèn)緩存時(shí)間 60S public final static int CAHCEHOUR = 60 * 60;// 默認(rèn)緩存時(shí)間 1hr public final static int CAHCEDAY = 60 * 60 * 24;// 默認(rèn)緩存時(shí)間 1Day public final static int CAHCEWEEK = 60 * 60 * 24 * 7;// 默認(rèn)緩存時(shí)間 1week public final static int CAHCEMONTH = 60 * 60 * 24 * 7 * 30;// 默認(rèn)緩存時(shí)間 1month @Autowired private RedisTemplate<String, String> redisTemplate; public <T> boolean putCache(String key, T obj) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serialize(obj); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.setNX(bkey, bvalue); } }); return result; } public <T> void putCacheWithExpireTime(String key, T obj, final long expireTime) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serialize(obj); redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { connection.setEx(bkey, expireTime, bvalue); return true; } }); } public <T> boolean putListCache(String key, List<T> objList) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serializeList(objList); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.setNX(bkey, bvalue); } }); return result; } public <T> boolean putListCacheWithExpireTime(String key, List<T> objList, final long expireTime) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serializeList(objList); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { connection.setEx(bkey, expireTime, bvalue); return true; } }); return result; } public <T> T getCache(final String key, Class<T> targetClass) { byte[] result = redisTemplate.execute(new RedisCallback<byte[]>() { @Override public byte[] doInRedis(RedisConnection connection) throws DataAccessException { return connection.get(key.getBytes()); } }); if (result == null) { return null; } return ProtoStuffSerializerUtil.deserialize(result, targetClass); } public <T> List<T> getListCache(final String key, Class<T> targetClass) { byte[] result = redisTemplate.execute(new RedisCallback<byte[]>() { @Override public byte[] doInRedis(RedisConnection connection) throws DataAccessException { return connection.get(key.getBytes()); } }); if (result == null) { return null; } return ProtoStuffSerializerUtil.deserializeList(result, targetClass); } /** * 精確刪除key * * @param key */ public void deleteCache(String key) { redisTemplate.delete(key); } /** * 模糊刪除key * * @param pattern */ public void deleteCacheWithPattern(String pattern) { Set<String> keys = redisTemplate.keys(pattern); redisTemplate.delete(keys); } /** * 清空所有緩存 */ public void clearCache() { deleteCacheWithPattern(RedisCache.CAHCENAME + "|*"); } }
創(chuàng)建redis的配置文件 redis.properties。
寫入
#redis config redis.pass= redis.pool.maxTotal=105 redis.pool.maxIdle=10 redis.pool.maxWaitMillis=5000 redis.pool.testOnBorrow=true redis.ip=127.0.0.1 redis.port=6379
這些根據(jù)自己的需求自定義配置就好了
這樣redis就繼承好了
SpringMVC中使用redis
創(chuàng)建一個(gè)redisCache類
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import com.niit.util.ProtoStuffSerializerUtil; import java.util.List; import java.util.Set; /** * redis緩存 * * @author James * */ @Component public class RedisCache { public final static String CAHCENAME = "niitcache";// 緩存名 public final static int CAHCETIME = 60;// 默認(rèn)緩存時(shí)間 60S public final static int CAHCEHOUR = 60 * 60;// 默認(rèn)緩存時(shí)間 1hr public final static int CAHCEDAY = 60 * 60 * 24;// 默認(rèn)緩存時(shí)間 1Day public final static int CAHCEWEEK = 60 * 60 * 24 * 7;// 默認(rèn)緩存時(shí)間 1week public final static int CAHCEMONTH = 60 * 60 * 24 * 7 * 30;// 默認(rèn)緩存時(shí)間 1month @Autowired private RedisTemplate<String, String> redisTemplate; public <T> boolean putCache(String key, T obj) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serialize(obj); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.setNX(bkey, bvalue); } }); return result; } public <T> void putCacheWithExpireTime(String key, T obj, final long expireTime) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serialize(obj); redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { connection.setEx(bkey, expireTime, bvalue); return true; } }); } public <T> boolean putListCache(String key, List<T> objList) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serializeList(objList); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.setNX(bkey, bvalue); } }); return result; } public <T> boolean putListCacheWithExpireTime(String key, List<T> objList, final long expireTime) { final byte[] bkey = key.getBytes(); final byte[] bvalue = ProtoStuffSerializerUtil.serializeList(objList); boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { connection.setEx(bkey, expireTime, bvalue); return true; } }); return result; } public <T> T getCache(final String key, Class<T> targetClass) { byte[] result = redisTemplate.execute(new RedisCallback<byte[]>() { @Override public byte[] doInRedis(RedisConnection connection) throws DataAccessException { return connection.get(key.getBytes()); } }); if (result == null) { return null; } return ProtoStuffSerializerUtil.deserialize(result, targetClass); } public <T> List<T> getListCache(final String key, Class<T> targetClass) { byte[] result = redisTemplate.execute(new RedisCallback<byte[]>() { @Override public byte[] doInRedis(RedisConnection connection) throws DataAccessException { return connection.get(key.getBytes()); } }); if (result == null) { return null; } return ProtoStuffSerializerUtil.deserializeList(result, targetClass); } /** * 精確刪除key * * @param key */ public void deleteCache(String key) { redisTemplate.delete(key); } /** * 模糊刪除key * * @param pattern */ public void deleteCacheWithPattern(String pattern) { Set<String> keys = redisTemplate.keys(pattern); redisTemplate.delete(keys); } /** * 清空所有緩存 */ public void clearCache() { deleteCacheWithPattern(RedisCache.CAHCENAME + "|*"); } }
寫進(jìn)和讀取redis
<span style="white-space:pre"> </span>String v = "test"; cache.putCacheWithExpireTime("key", v, cache.CAHCEHOUR); String value = cache.getCache("key", String.class); System.out.println(value);
然后集成成功。redis是將數(shù)據(jù)放進(jìn)內(nèi)存里。所以需要考慮做redis服務(wù)器時(shí)候的內(nèi)存性能,還有redis的緩存策略等等。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持本站。
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。