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

Posted 队长给我球。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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      * @return155      */  
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 键 
22

以上是关于Windows环境下springboot集成redis的安装与使用的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot集成Redis并实现主从架构

SpringBoot集成Redis并实现主从架构

SpringBoot | 集成Redis

centos7环境下搭建redis及springboot连接集成

springboot集成plantuml

windows环境下简单Jenkins持续集成搭建