Windows环境下springboot集成redis的安装与使用

一,redis安装

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

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

连接打开后如下图所示

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

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

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

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

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

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

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

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”  可能会报错,如下图。原因是我们已经在这个端口绑定了一个服务,就是我们前面启动的那个所谓的临时服务,这个时候我们需要关闭刚才启动的临时服务的窗口。

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

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

二,springboot 集成redis

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

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

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

 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>

3,编写RedisConfig 类代码

  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 }

4,编写RedisUtil类,用于操作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 }

5,新建 redis.properties 文件

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

6,编写redis.properties 文件内容

 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

7,编写测试controller

 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 }

8,测试验证

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/JJJ1990/p/10438292.html

时间: 2024-08-29 05:58:43

Windows环境下springboot集成redis的安装与使用的相关文章

Windows环境下Android Studio v1.0安装教程

Windows环境下Android Studio v1.0安装教程 Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SDK) (813 MB) exe(不包含SDK) (250 MB) zip (235 MB) Mac dmg (234 MB) zip (233 MB) Linux: zip (233 MB) 说明: 32位系统和64位系统是同一个安

【转】Windows环境下Android Studio v1.0安装教程

原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/158-androidstudio-v1-0-win-install Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包.要求:JDK 7以及以上版本. Android Studio安装文件. Windows:exe(包含SDK) (813 MB)exe(不包含

Windows环境下ARM集成开发环境的搭建与使用

Windows环境下能够使用Eclipse IDE for C/C++ Developers来搭建ARM开发环境 本文地址:http://blog.csdn.net/u011833609/article/details/30290655 安装过程例如以下: 1. 安装Java SE 网址:http://www.oracle.com/technetwork/java/javase/downloads/jre-7u3-download-1501631.html 下载这个文件:jre-7u3-wind

windows 环境下.Net使用Redis缓存

Redis简介 Redis是一个开源的,使用C语言编写,面向"键/值"对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的key-value数据库,并且提供了多种语言的API 性能测试结果表示SET操作每秒钟可达110000次,GET操作每秒81000次(当然不同的服务器配置性能不同). Redis目前提供五种数据类型:string(字符串),list(链表), Hash(哈希),set(集合)及zset(s

Learing-Python【0】:Windows环境下Python2和Python3的安装

一.下载 可以在官网下载最新版本, 也可以在以下链接中找想安装的版本下载下来,这里以Python3.6和Python2.7为例 https://www.python.org/ftp/python/ 二.安装Python2.7 1. 为所有用户安装 2. 更改安装路径 这里我选择不添加环境变量,等安装好后手动添加 3. 将Python2添加到环境变量(Win7系统的环境变量在一行显示,两个环境变量之间需要用分号隔开) D:\Program Files\Python27 D:\Program Fil

Windows环境下的NodeJS+NPM+Bower安装配置步骤

Windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL”按钮,直接点击就会自动下载安装.安装过程基本直接“NEXT”就可以了.(Windows的安装msi文件在过程中会直接添加path的系统变量,变量值是你的安装路径,例如“C:\Program Files\nodejs”,我这里的演示是安装在“D:\Program Files\nodejs”) 废话不多说,

windows环境下MySQL-5.7.12-winx64下载安装与配置

系统:64位Win-7 官网压缩包:mysql-5.7.12-winx64.zip 前后花了一些时间,以前都是下载软件直接安装在本地,现在这个不一样,下载压缩包后要解压缩到安装目录,然后在控制台下配置服务. 整体的流程如下: 1. 下载: 到http://dev.mysql.com/downloads/mysql/下载,或者登陆mysql官网按Downloads——Community——MySQL Community Server顺序访问,可以看到 我的机子是64位的,于是选第二个(344.2M

Windows环境下的NodeJS+NPM+Bower安装配置

npm作为一个NodeJS的模块管理,之前我由于没有系统地看资料所以导致安装配置模块的时候走了一大段弯路,所以现在很有必要列出来记录下.我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立“node_global”及“node_cache”两个文件夹.我们就在cmd中键入两行命令: npm config set prefix "D:\Program Files\nodejs\node_global" 和

windows环境下mysql的解压安装以及备份和还原

系统环境为server2012 1.下载mysql解压版,解压安装包到指定目录 2.在以上目录中,复制一份my-default.ini文件,重命名为my.ini,进行如下修改(按照需要): [mysqld] # 服务端的编码方式 character_set_server=utf8 # These are commonly set, remove the # and set as required. #数据文件存放目录 basedir = C:\Program Files\mysql #数据文件存