gpt4 book ai didi

springmvc集成使用redis过程

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章springmvc集成使用redis过程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Redis安装

首先安装redis。这个就不重点介绍了。windos下载redis就行.

我用的是mac 。

用命令行安装的.

安装命令 。

?
1
yum install redis

运行命令 。

?
1
sudo redis-server

这样就安装运行成功了.

spring集成redis

首先你需要下载驱动包,下载 jedis.jar,确保下载最新驱动包。然后导包.

在spring配置文件里我这是ApplicationContext .xml文件添加 。

?
1
2
<!-- 引入同文件夹下的redis属性配置文件 -->
  < import resource = "spring-redis.xml" />

然后用创建spring-redis.xml文件 。

写入 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<? 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">
        
     <!-- 缓存的层级-->
     < 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="int" />
                 </bean>
                 <bean class="redis.clients.jedis.HostAndPort">
                     <constructor-arg index="0" value="${redis.ip2}" />
                     <constructor-arg index="1" value="${redis.port2}" type="int" />
                 </bean>
                 <bean class="redis.clients.jedis.HostAndPort">
                     <constructor-arg index="0" value="${redis.ip3}" />
                     <constructor-arg index="1" value="${redis.port3}" type="int" />
                 </bean>
                 <bean class="redis.clients.jedis.HostAndPort">
                     <constructor-arg index="0" value="${redis.ip4}" />
                     <constructor-arg index="1" value="${redis.port4}" type="int" />
                 </bean>
                 <bean class="redis.clients.jedis.HostAndPort">
                     <constructor-arg index="0" value="${redis.ip5}" />
                     <constructor-arg index="1" value="${redis.port5}" type="int" />
                 </bean>
                 <bean class="redis.clients.jedis.HostAndPort">
                     <constructor-arg index="0" value="${redis.ip6}" />
                     <constructor-arg index="1" value="${redis.port6}" type="int" />
                 </bean>
             </set>
         </constructor-arg>
         <constructor-arg index="1" value="2000" type="int"></constructor-arg>
         <constructor-arg index="2" value="100" type="int"></constructor-arg>
         <constructor-arg index="3" ref="jedisPoolConfig"></constructor-arg>
     </bean>-->
 
     <!--redis Sentinel主从高可用方案配置 -->
     <!-- <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
         <property name="master">
             <bean class="org.springframework.data.redis.connection.RedisNode">
                 <property name="name" value="master-1"></property>
             </bean>
         </property>
         <property name="sentinels">
             <set>
                 <bean class="org.springframework.data.redis.connection.RedisNode">
                     <constructor-arg name="host" value="${sentinel1.ip}"></constructor-arg>
                     <constructor-arg name="port" value="${sentinel1.port}"></constructor-arg>
                 </bean>
                 <bean class="org.springframework.data.redis.connection.RedisNode">
                     <constructor-arg name="host" value="${sentinel2.ip}"></constructor-arg>
                     <constructor-arg name="port" value="${sentinel2.port}"></constructor-arg>
                 </bean>
                 <bean class="org.springframework.data.redis.connection.RedisNode">
                     <constructor-arg name="host" value="${sentinel3.ip}"></constructor-arg>
                     <constructor-arg name="port" value="${sentinel3.port}"></constructor-arg>
                 </bean>
             </set>
         </property>
     </bean>
     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true">
         <property name="password" value="${redis.pass}" />
         <property name="poolConfig">
             <ref bean="jedisPoolConfig" />
         </property>
         <constructor-arg name="sentinelConfig" ref="sentinelConfiguration" />
     </bean> -->
 
     <!-- redis单节点数据库连接配置 -->
     < bean id = "jedisConnectionFactory" class = "org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
         < property name = "hostName" value = "${redis.ip}" />
         < property name = "port" value = "${redis.port}" />
         < property name = "password" value = "${redis.pass}" />
         < property name = "poolConfig" ref = "jedisPoolConfig" />
     </ bean >
 
     <!-- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 -->
     < bean id = "redisTemplate" class = "org.springframework.data.redis.core.StringRedisTemplate" >
         < property name = "connectionFactory" ref = "jedisConnectionFactory" />
     </ bean >
    
</ beans >
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
public class RedisCache {
     public final static String CAHCENAME = "niitcache" ; // 缓存名
     public final static int CAHCETIME = 60 ; // 默认缓存时间 60S
     public final static int CAHCEHOUR = 60 * 60 ; // 默认缓存时间 1hr
     public final static int CAHCEDAY = 60 * 60 * 24 ; // 默认缓存时间 1Day
     public final static int CAHCEWEEK = 60 * 60 * 24 * 7 ; // 默认缓存时间 1week
     public final static int CAHCEMONTH = 60 * 60 * 24 * 7 * 30 ; // 默认缓存时间 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 + "|*" );
     }
}

创建redis的配置文件 redis.properties.

写入 。

?
1
2
3
4
5
6
7
8
9
#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

这些根据自己的需求自定义配置就好了 。

这样redis就继承好了 。

SpringMVC中使用redis

创建一个redisCache类 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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 ; // 默认缓存时间 60S
     public final static int CAHCEHOUR = 60 * 60 ; // 默认缓存时间 1hr
     public final static int CAHCEDAY = 60 * 60 * 24 ; // 默认缓存时间 1Day
     public final static int CAHCEWEEK = 60 * 60 * 24 * 7 ; // 默认缓存时间 1week
     public final static int CAHCEMONTH = 60 * 60 * 24 * 7 * 30 ; // 默认缓存时间 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 + "|*" );
     }
}

写进和读取redis

?
1
2
3
4
<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是将数据放进内存里。所以需要考虑做redis服务器时候的内存性能,还有redis的缓存策略等等.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/qq_24046745/article/details/52702261 。

最后此篇关于springmvc集成使用redis过程的文章就讲到这里了,如果你想了解更多关于springmvc集成使用redis过程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com