一,redis安装

首先我们需要下载Windows版本的redis压缩包地址如下:

https://github.com/MicrosoftArchive/redis/releases

连接打开后如下图所示

Windows环境下springboot集成redis的安装与使用-夜河资源网

我们选择64位的压缩包,下载后需要解压,我们解压至D盘,如下图所示:

Windows环境下springboot集成redis的安装与使用-夜河资源网

接下来我们需要执行一些安装命令

1,在如上图的目录中,直接键入“cmd

2,在打开的cmd命令窗口中输入 “redis-server.exe redis.windows.conf” 用于启动redis服务

Windows环境下springboot集成redis的安装与使用-夜河资源网

(注意采用这个命令相当于启动一个临时服务,如果当前窗口被关闭,则服务也会被关闭)

3,我们再打开一个同样的cmd命令窗口,在其中键入 “redis-cli” ,这个命令的作用是启动一个redis客户端。客户端默认的端口号是6379 如果我们要修改端口号,需要打开我们前面执行的命令中的conf文件redis.windows.conf 找到port 修改其后的端口号

4,在启动的客户端中检查redis服务是否正常,我们可以进行数据的设置和读取等操作,比如我们可以执行一个命令 “set redis jj”,然后我们再执行一个命令“get redis” 就可以将前面设置的123 查询出来 ,如下图所示

Windows环境下springboot集成redis的安装与使用-夜河资源网

5,将redis服务注册到我们的Windows,我们继续新打开一个cmd窗口,执行命令 “redis-server --service-install redis.windows.conf” 这个时候呢,提示:Redis successfully installed as a service. 表示加入服务成功!

6,启动注册到Windows的redis服务。键入命令“redis-server.exe  --service-start”  可能会报错,如下图。原因是我们已经在这个端口绑定了一个服务,就是我们前面启动的那个所谓的临时服务,这个时候我们需要关闭刚才启动的临时服务的窗口。

Windows环境下springboot集成redis的安装与使用-夜河资源网

 7,再启动如果还是报上面的错误,那可能需要我们调整注册到Windows的服务为本地系统服务,而不是网络服务,如下图所示。除此之外可能还会有防火墙等问题导致redis服务启动失败。

Windows环境下springboot集成redis的安装与使用-夜河资源网

8,如下图所示,服务启动ok,这个时候我们在继续操作redis客户端是没有问题的。

Windows环境下springboot集成redis的安装与使用-夜河资源网

二,springboot 集成redis

1,新建springboot工程,如果有不清楚如何新建的,请移步 https://www.cnblogs.com/JJJ1990/p/8384386.html

2,在pom文件中加入redis jar包的引用

我的整个工程的pom文件如下,注意第34-38行,即为引入的redis jar包

Windows环境下springboot集成redis的安装与使用-夜河资源网
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>com</groupId>
 6   <artifactId>redis</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>redis</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16   
17   <parent>
18         <groupId>org.springframework.boot</groupId>
19         <artifactId>spring-boot-starter-parent</artifactId>
20         <version>1.5.8.RELEASE</version>
21    </parent>
22 
23   <dependencies>
24     <dependency>
25       <groupId>junit</groupId>
26       <artifactId>junit</artifactId>
27       <version>3.8.1</version>
28       <scope>test</scope>
29     </dependency>
30       <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-web</artifactId>
33         </dependency>
34       <dependency>
35             <groupId>org.springframework.boot</groupId>
36             <artifactId>spring-boot-starter-data-redis</artifactId>
37         </dependency> 
38   </dependencies>
39 </project>
Windows环境下springboot集成redis的安装与使用-夜河资源网

3,编写RedisConfig 类代码

Windows环境下springboot集成redis的安装与使用-夜河资源网
  1 package com.redis;
  2 
  3 import org.springframework.beans.factory.annotation.Value;
  4 import org.springframework.context.annotation.Bean;
  5 import org.springframework.context.annotation.Configuration;
  6 import org.springframework.context.annotation.PropertySource;
  7 import org.springframework.data.redis.connection.RedisConnectionFactory;
  8 import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  9 import org.springframework.data.redis.core.RedisTemplate;
 10 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 11 import org.springframework.data.redis.serializer.StringRedisSerializer;
 12 
 13 import redis.clients.jedis.JedisPoolConfig;
 14 
 15 @Configuration
 16 @PropertySource("classpath:config/redis.properties")
 17 public class RedisConfig {
 18 
 19     @Value("${redis.maxIdle}")
 20     private Integer maxIdle;
 21 
 22     @Value("${redis.maxTotal}")
 23     private Integer maxTotal;
 24 
 25     @Value("${redis.maxWaitMillis}")
 26     private Integer maxWaitMillis;
 27 
 28     @Value("${redis.minEvictableIdleTimeMillis}")
 29     private Integer minEvictableIdleTimeMillis;
 30 
 31     @Value("${redis.numTestsPerEvictionRun}")
 32     private Integer numTestsPerEvictionRun;
 33 
 34     @Value("${redis.timeBetweenEvictionRunsMillis}")
 35     private long timeBetweenEvictionRunsMillis;
 36 
 37     @Value("${redis.testOnBorrow}")
 38     private boolean testOnBorrow;
 39 
 40     @Value("${redis.testWhileIdle}")
 41     private boolean testWhileIdle;
 42 
 43 
 44     @Value("${spring.redis.cluster.nodes}")
 45     private String clusterNodes; 
 46 
 47     @Value("${spring.redis.cluster.max-redirects}")
 48     private Integer mmaxRedirectsac;
 49 
 50     /**
 51      * JedisPoolConfig 连接池
 52      * @return
 53      */
 54     @Bean
 55     public JedisPoolConfig jedisPoolConfig() {
 56         JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
 57         // 最大空闲数
 58         jedisPoolConfig.setMaxIdle(maxIdle);
 59         // 连接池的最大数据库连接数
 60         jedisPoolConfig.setMaxTotal(maxTotal);
 61         // 最大建立连接等待时间
 62         jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
 63         // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
 64         jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
 65         // 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
 66         jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
 67         // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
 68         jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
 69         // 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
 70         jedisPoolConfig.setTestOnBorrow(testOnBorrow);
 71         // 在空闲时检查有效性, 默认false
 72         jedisPoolConfig.setTestWhileIdle(testWhileIdle);
 73         System.out.println("redis 连接池配置完成!");
 74         return jedisPoolConfig;
 75     }
 76     /**
 77      * 单机版配置
 78     * @throws
 79      */
 80     @Bean
 81     public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
 82         JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
 83         //连接池  
 84         JedisConnectionFactory.setPoolConfig(jedisPoolConfig);  
 85         //IP地址  
 86         JedisConnectionFactory.setHostName("127.0.0.1");  
 87         //端口号  
 88         JedisConnectionFactory.setPort(6379);  
 89         //如果Redis设置有密码  
 90         //JedisConnectionFactory.setPassword(password);  
 91         //客户端超时时间单位是毫秒  
 92         JedisConnectionFactory.setTimeout(5000);  
 93         System.out.println("jedis  连接工厂配置完成!");
 94         return JedisConnectionFactory; 
 95     }
 96 
 97     /**
 98      * 实例化 RedisTemplate 对象
 99      * @return
100      */
101     @Bean
102     public RedisTemplate<String, Object> functionDomainRedisTemplate(JedisConnectionFactory redisConnectionFactory) {
103         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
104         initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
105         System.out.println("functionDomainRedisTemplates 配置完成!");
106         return redisTemplate;
107     }
108     /**
109      * 设置数据存入 redis 的序列化方式,并开启事务
110      * @param redisTemplate
111      * @param factory
112      */
113     private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
114         //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!  
115         redisTemplate.setKeySerializer(new StringRedisSerializer());
116         redisTemplate.setHashKeySerializer(new StringRedisSerializer());
117         redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
118         redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
119         // 开启事务
120         redisTemplate.setEnableTransactionSupport(true);
121         redisTemplate.setConnectionFactory(factory);
122     }
123     /**
124      * 注入封装RedisTemplate
125     * @Title: redisUtil 
126     * @return RedisUtil
127     * @throws
128      */
129     @Bean(name = "redisUtil")
130     public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
131         RedisUtil redisUtil = new RedisUtil();
132         redisUtil.setRedisTemplate(redisTemplate);
133         System.out.println("redisUtil 配置完成!");
134         return redisUtil;
135     }
136 }
Windows环境下springboot集成redis的安装与使用-夜河资源网

4,编写RedisUtil类,用于操作redis数据库

Windows环境下springboot集成redis的安装与使用-夜河资源网
  1 package com.redis;
  2 
  3 import java.util.List;
  4 import java.util.Map;
  5 import java.util.Set;
  6 import java.util.concurrent.TimeUnit;
  7 
  8 import org.springframework.data.redis.core.RedisTemplate;
  9 import org.springframework.util.CollectionUtils;
 10 
 11 public class RedisUtil {
 12 
 13 private RedisTemplate<String, Object> redisTemplate;  
 14 
 15     public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {  
 16         this.redisTemplate = redisTemplate;  
 17     }  
 18   
 19     /** 
 20      * 指定缓存失效时间 
 21      * @param key 键 
 22      * @param time 时间(秒) 
 23      * @return 
 24      */  
 25     public boolean expire(String key,long time){  
 26         try {  
 27             if(time>0){  
 28                 redisTemplate.expire(key, time, TimeUnit.SECONDS);  
 29             }  
 30             return true;  
 31         } catch (Exception e) {  
 32             e.printStackTrace();  
 33             return false;  
 34         }  
 35     }  
 36 
 37     /** 
 38      * 根据key 获取过期时间 
 39      * @param key 键 不能为null 
 40      * @return 时间(秒) 返回0代表为永久有效 
 41      */  
 42     public long getExpire(String key){  
 43         return redisTemplate.getExpire(key,TimeUnit.SECONDS);  
 44     }  
 45 
 46     /** 
 47      * 判断key是否存在 
 48      * @param key 键 
 49      * @return true 存在 false不存在 
 50      */  
 51     public boolean hasKey(String key){  
 52         try {  
 53             return redisTemplate.hasKey(key);  
 54         } catch (Exception e) {  
 55             e.printStackTrace();  
 56             return false;  
 57         }  
 58     }  
 59 
 60     /** 
 61      * 删除缓存 
 62      * @param key 可以传一个值 或多个 
 63      */  
 64     @SuppressWarnings("unchecked")  
 65     public void del(String ... key){  
 66         if(key!=null&&key.length>0){  
 67             if(key.length==1){  
 68                 redisTemplate.delete(key[0]);  
 69             }else{  
 70                 redisTemplate.delete(CollectionUtils.arrayToList(key));  
 71             }  
 72         }  
 73     }  
 74 
 75     //============================String=============================  
 76     /** 
 77      * 普通缓存获取 
 78      * @param key 键 
 79      * @return 值 
 80      */  
 81     public Object get(String key){  
 82         return key==null?null:redisTemplate.opsForValue().get(key);  
 83     }  
 84 
 85     /** 
 86      * 普通缓存放入 
 87      * @param key 键 
 88      * @param value 值 
 89      * @return true成功 false失败 
 90      */  
 91     public boolean set(String key,Object value) {  
 92          try {  
 93             redisTemplate.opsForValue().set(key, value);  
 94             return true;  
 95         } catch (Exception e) {  
 96             e.printStackTrace();  
 97             return false;  
 98         }  
 99 
100     }  
101 
102     /** 
103      * 普通缓存放入并设置时间 
104      * @param key 键 
105      * @param value 值 
106      * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 
107      * @return true成功 false 失败 
108      */  
109     public boolean set(String key,Object value,long time){  
110         try {  
111             if(time>0){  
112                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);  
113             }else{  
114                 set(key, value);  
115             }  
116             return true;  
117         } catch (Exception e) {  
118             e.printStackTrace();  
119             return false;  
120         }  
121     }  
122 
123     /** 
124      * 递增 
125      * @param key 键 
126      * @param by 要增加几(大于0) 
127      * @return 
128      */  
129     public long incr(String key, long delta){    
130         if(delta<0){  
131             throw new RuntimeException("递增因子必须大于0");  
132         }  
133         return redisTemplate.opsForValue().increment(key, delta);  
134     }  
135 
136     /** 
137      * 递减 
138      * @param key 键 
139      * @param by 要减少几(小于0) 
140      * @return 
141      */  
142     public long decr(String key, long delta){    
143         if(delta<0){  
144             throw new RuntimeException("递减因子必须大于0");  
145         }  
146         return redisTemplate.opsForValue().increment(key, -delta);    
147     }    
148 
149     //================================Map=================================  
150     /** 
151      * HashGet 
152      * @param key 键 不能为null 
153      * @param item 项 不能为null 
154      * @return 值 
155      */  
156     public Object hget(String key,String item){  
157         return redisTemplate.opsForHash().get(key, item);  
158     }  
159 
160     /** 
161      * 获取hashKey对应的所有键值 
162      * @param key 键 
163      * @return 对应的多个键值 
164      */  
165     public Map<Object,Object> hmget(String key){  
166         return redisTemplate.opsForHash().entries(key);  
167     }  
168 
169     /** 
170      * HashSet 
171      * @param key 键 
172      * @param map 对应多个键值 
173      * @return true 成功 false 失败 
174      */  
175     public boolean hmset(String key, Map<String,Object> map){    
176         try {  
177             redisTemplate.opsForHash().putAll(key, map);  
178             return true;  
179         } catch (Exception e) {  
180             e.printStackTrace();  
181             return false;  
182         }  
183     }  
184 
185     /** 
186      * HashSet 并设置时间 
187      * @param key 键 
188      * @param map 对应多个键值 
189      * @param time 时间(秒) 
190      * @return true成功 false失败 
191      */  
192     public boolean hmset(String key, Map<String,Object> map, long time){    
193         try {  
194             redisTemplate.opsForHash().putAll(key, map);  
195             if(time>0){  
196                 expire(key, time);  
197             }  
198             return true;  
199         } catch (Exception e) {  
200             e.printStackTrace();  
201             return false;  
202         }  
203     }  
204 
205     /** 
206      * 向一张hash表中放入数据,如果不存在将创建 
207      * @param key 键 
208      * @param item 项 
209      * @param value 值 
210      * @return true 成功 false失败 
211      */  
212     public boolean hset(String key,String item,Object value) {  
213          try {  
214             redisTemplate.opsForHash().put(key, item, value);  
215             return true;  
216         } catch (Exception e) {  
217             e.printStackTrace();  
218             return false;  
219         }  
220     }  
221 
222     /** 
223      * 向一张hash表中放入数据,如果不存在将创建 
224      * @param key 键 
225      * @param item 项 
226      * @param value 值 
227      * @param time 时间(秒)  注意:如果已存在的hash表有时间,这里将会替换原有的时间 
228      * @return true 成功 false失败 
229      */  
230     public boolean hset(String key,String item,Object value,long time) {  
231          try {  
232             redisTemplate.opsForHash().put(key, item, value);  
233             if(time>0){  
234                 expire(key, time);  
235             }  
236             return true;  
237         } catch (Exception e) {  
238             e.printStackTrace();  
239             return false;  
240         }  
241     }  
242 
243     /** 
244      * 删除hash表中的值 
245      * @param key 键 不能为null 
246      * @param item 项 可以使多个 不能为null 
247      */  
248     public void hdel(String key, Object... item){    
249         redisTemplate.opsForHash().delete(key,item);  
250     }   
251 
252     /** 
253      * 判断hash表中是否有该项的值 
254      * @param key 键 不能为null 
255      * @param item 项 不能为null 
256      * @return true 存在 false不存在 
257      */  
258     public boolean hHasKey(String key, String item){  
259         return redisTemplate.opsForHash().hasKey(key, item);  
260     }   
261 
262     /** 
263      * hash递增 如果不存在,就会创建一个 并把新增后的值返回 
264      * @param key 键 
265      * @param item 项 
266      * @param by 要增加几(大于0) 
267      * @return 
268      */  
269     public double hincr(String key, String item,double by){    
270         return redisTemplate.opsForHash().increment(key, item, by);  
271     }  
272 
273     /** 
274      * hash递减 
275      * @param key 键 
276      * @param item 项 
277      * @param by 要减少记(小于0) 
278      * @return 
279      */  
280     public double hdecr(String key, String item,double by){    
281         return redisTemplate.opsForHash().increment(key, item,-by);    
282     }    
283 
284     //============================set=============================  
285     /** 
286      * 根据key获取Set中的所有值 
287      * @param key 键 
288      * @return 
289      */  
290     public Set<Object> sGet(String key){  
291         try {  
292             return redisTemplate.opsForSet().members(key);  
293         } catch (Exception e) {  
294             e.printStackTrace();  
295             return null;  
296         }  
297     }  
298 
299     /** 
300      * 根据value从一个set中查询,是否存在 
301      * @param key 键 
302      * @param value 值 
303      * @return true 存在 false不存在 
304      */  
305     public boolean sHasKey(String key,Object value){  
306         try {  
307             return redisTemplate.opsForSet().isMember(key, value);  
308         } catch (Exception e) {  
309             e.printStackTrace();  
310             return false;  
311         }  
312     }  
313 
314     /** 
315      * 将数据放入set缓存 
316      * @param key 键 
317      * @param values 值 可以是多个 
318      * @return 成功个数 
319      */  
320     public long sSet(String key, Object...values) {  
321         try {  
322             return redisTemplate.opsForSet().add(key, values);  
323         } catch (Exception e) {  
324             e.printStackTrace();  
325             return 0;  
326         }  
327     }  
328 
329     /** 
330      * 将set数据放入缓存 
331      * @param key 键 
332      * @param time 时间(秒) 
333      * @param values 值 可以是多个 
334      * @return 成功个数 
335      */  
336     public long sSetAndTime(String key,long time,Object...values) {  
337         try {  
338             Long count = redisTemplate.opsForSet().add(key, values);  
339             if(time>0) expire(key, time);  
340             return count;  
341         } catch (Exception e) {  
342             e.printStackTrace();  
343             return 0;  
344         }  
345     }  
346 
347     /** 
348      * 获取set缓存的长度 
349      * @param key 键 
350      * @return 
351      */  
352     public long sGetSetSize(String key){  
353         try {  
354             return redisTemplate.opsForSet().size(key);  
355         } catch (Exception e) {  
356             e.printStackTrace();  
357             return 0;  
358         }  
359     }  
360 
361     /** 
362      * 移除值为value的 
363      * @param key 键 
364      * @param values 值 可以是多个 
365      * @return 移除的个数 
366      */  
367     public long setRemove(String key, Object ...values) {  
368         try {  
369             Long count = redisTemplate.opsForSet().remove(key, values);  
370             return count;  
371         } catch (Exception e) {  
372             e.printStackTrace();  
373             return 0;  
374         }  
375     }  
376     //===============================list=================================  
377 
378     /** 
379      * 获取list缓存的内容 
380      * @param key 键 
381      * @param start 开始 
382      * @param end 结束  0 到 -1代表所有值 
383      * @return 
384      */  
385     public List<Object> lGet(String key,long start, long end){  
386         try {  
387             return redisTemplate.opsForList().range(key, start, end);  
388         } catch (Exception e) {  
389             e.printStackTrace();  
390             return null;  
391         }  
392     }  
393 
394     /** 
395      * 获取list缓存的长度 
396      * @param key 键 
397      * @return 
398      */  
399     public long lGetListSize(String key){  
400         try {  
401             return redisTemplate.opsForList().size(key);  
402         } catch (Exception e) {  
403             e.printStackTrace();  
404             return 0;  
405         }  
406     }  
407 
408     /** 
409      * 通过索引 获取list中的值 
410      * @param key 键 
411      * @param index 索引  index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 
412      * @return 
413      */  
414     public Object lGetIndex(String key,long index){  
415         try {  
416             return redisTemplate.opsForList().index(key, index);  
417         } catch (Exception e) {  
418             e.printStackTrace();  
419             return null;  
420         }  
421     }  
422 
423     /** 
424      * 将list放入缓存 
425      * @param key 键 
426      * @param value 值 
427      * @param time 时间(秒) 
428      * @return 
429      */  
430     public boolean lSet(String key, Object value) {  
431         try {  
432             redisTemplate.opsForList().rightPush(key, value);  
433             return true;  
434         } catch (Exception e) {  
435             e.printStackTrace();  
436             return false;  
437         }  
438     }  
439 
440     /** 
441      * 将list放入缓存 
442      * @param key 键 
443      * @param value 值 
444      * @param time 时间(秒) 
445      * @return 
446      */  
447     public boolean lSet(String key, Object value, long time) {  
448         try {  
449             redisTemplate.opsForList().rightPush(key, value);  
450             if (time > 0) expire(key, time);  
451             return true;  
452         } catch (Exception e) {  
453             e.printStackTrace();  
454             return false;  
455         }  
456     }  
457 
458     /** 
459      * 将list放入缓存 
460      * @param key 键 
461      * @param value 值 
462      * @param time 时间(秒) 
463      * @return 
464      */  
465     public boolean lSet(String key, List<Object> value) {  
466         try {  
467             redisTemplate.opsForList().rightPushAll(key, value);  
468             return true;  
469         } catch (Exception e) {  
470             e.printStackTrace();  
471             return false;  
472         }  
473     }  
474 
475     /** 
476      * 将list放入缓存 
477      * @param key 键 
478      * @param value 值 
479      * @param time 时间(秒) 
480      * @return 
481      */  
482     public boolean lSet(String key, List<Object> value, long time) {  
483         try {  
484             redisTemplate.opsForList().rightPushAll(key, value);  
485             if (time > 0) expire(key, time);  
486             return true;  
487         } catch (Exception e) {  
488             e.printStackTrace();  
489             return false;  
490         }  
491     }  
492 
493     /** 
494      * 根据索引修改list中的某条数据 
495      * @param key 键 
496      * @param index 索引 
497      * @param value 值 
498      * @return 
499      */  
500     public boolean lUpdateIndex(String key, long index,Object value) {  
501         try {  
502             redisTemplate.opsForList().set(key, index, value);  
503             return true;  
504         } catch (Exception e) {  
505             e.printStackTrace();  
506             return false;  
507         }  
508     }   
509 
510     /** 
511      * 移除N个值为value  
512      * @param key 键 
513      * @param count 移除多少个 
514      * @param value 值 
515      * @return 移除的个数 
516      */  
517     public long lRemove(String key,long count,Object value) {  
518         try {  
519             Long remove = redisTemplate.opsForList().remove(key, count, value);  
520             return remove;  
521         } catch (Exception e) {  
522             e.printStackTrace();  
523             return 0;  
524         }  
525     }  
526 }
Windows环境下springboot集成redis的安装与使用-夜河资源网

5,新建 redis.properties 文件

注意文件位置,在我们新建RedisConfig 的时候有指定 为config/redis.properties ,所以我们的redis.properties 文件位置如下图所示

Windows环境下springboot集成redis的安装与使用-夜河资源网

6,编写redis.properties 文件内容

Windows环境下springboot集成redis的安装与使用-夜河资源网
 1 #Matser的ip地址  
 2 redis.hostName=172.0.0.1
 3 #端口号  
 4 redis.port=6379
 5 #如果有密码  
 6 redis.password=
 7 #客户端超时时间单位是毫秒 默认是2000 
 8 redis.timeout=10000  
 9 
10 #最大空闲数  
11 redis.maxIdle=300  
12 #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal  
13 #redis.maxActive=600  
14 #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性  
15 redis.maxTotal=1000  
16 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。  
17 redis.maxWaitMillis=1000  
18 #连接的最小空闲时间 默认1800000毫秒(30分钟)  
19 redis.minEvictableIdleTimeMillis=300000  
20 #每次释放连接的最大数目,默认3  
21 redis.numTestsPerEvictionRun=1024  
22 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1  
23 redis.timeBetweenEvictionRunsMillis=30000  
24 #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个  
25 redis.testOnBorrow=true  
26 #在空闲时检查有效性, 默认false  
27 redis.testWhileIdle=true  
28 
29 #redis集群配置      
30 spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006
31 spring.redis.cluster.max-redirects=3
Windows环境下springboot集成redis的安装与使用-夜河资源网

7,编写测试controller 

Windows环境下springboot集成redis的安装与使用-夜河资源网
 1 package com.redis;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.PathVariable;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.RequestMethod;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9  
10 @Controller
11 public class Firstblood {
12     
13     @Autowired
14     RedisUtil redisUtil;
15     
16     @RequestMapping(value="/FristBlood/{name}",method= RequestMethod.GET)
17     @ResponseBody
18     public String hello(@PathVariable("name") String name) {
19         return "查询结果:" + redisUtil.get(name) ;
20     }
21 }
Windows环境下springboot集成redis的安装与使用-夜河资源网

8,测试验证

打开浏览器,输入 “http://localhost:8080/FristBlood/redis”  这个url中的redis就等于是我们本次请求要查询的key ,

但是这块有一个问题是,我们使用了@ResponseBody 注解,但是我们在redis数据库中,之前存入的时候,我们执行了一个命令"set redis jj" ,

虽然我们认为存入的是一个字符串但是在我们代码中执行获取这个key的value的时候不会这么认为,会导致解析出错。

这个时候我们从新set一下,如下图

Windows环境下springboot集成redis的安装与使用-夜河资源网

然后在浏览器中我们继续输入上面的url,返回的结果页面如下,则说明整个工程ok

Windows环境下springboot集成redis的安装与使用-夜河资源网

如果输入的key不存在 则返回null,如下图所示:

Windows环境下springboot集成redis的安装与使用-夜河资源网