第一次发表博客(SpringBoot+Redis环境搭建以及Linux系统下Redis的搭建)
最近因为项目需要,需要添加Redis缓存,由于之前没有自己亲手去搭建过,所以在搭建过程中遇到了不少的坑,也发现网上有关于SpringBoot+Redis的博客都是千篇一律,所以自己来总结一下,由于之前没有动手写过博客,所以对于这个格式不是太怎么会用。这篇文章之前发过一次,由于博主不会排版,导致图片不显示,贼是蛋疼,然后就删掉重新整理了一下
1.linux环境下搭建redis
首先需要从redis官网上下载redis的linux版本架包(https://redis.io/),我下载的是redis-3.2.9版本。
在linux的home文件下执行mkdir redis-tar 来新建一个文件夹来存放redis的架包(存放位置和路径可以自定义,下同)
执行 tar vxf redis-3.2.9.tar.gz
对架包进行解压
进入解压后的架包 cd /redis-3.2.9
执行 make
命令进行编译安装
移动redis-server、redis-cli、redis-conf、redis-benchmark 四个文件移动到 /usr/local/redis 目录下 (如若没有redis文件夹 手动创建一个 mkdir redis
)命令如下:
cp redis-server /usr/local/redis
cp redis-cli /usr/local/redis
cp redis.conf /usr/local/redis
cp redis-benchmark /usr/local/redis
然后启动redis服务
./redis-server redis.conf
这个时候回显示redis已经搭建成功,端口号为 6379
2. Redis客户端对linxu下的redis服务进行连接
首先去下载一个redis客户端,安装好
打开
当进行测试连接的时候,几秒钟还是连接不上,那么恭喜你中奖了,说明linux上配置的redis还是有一些问题,博主当时也遇到了这个问题,从网上也找了很对,千篇一律,没有正确的 。最后还是找到了一个靠谱的,这里就不一一叙述了,直接上链接 解决客户端不能连接linux上redis服务
3.SpringBoot的配置
走到这里,那么说明你的redis安装好并且能够使用客户端进行连接了,那么下面是最重要的一步就是springcloud上连接linux下的redis了首先我们需要在springcloud的yml配置文件下对redis的链接进行配置,具体的配置如下
redis:
# Redis数据库索引(默认为0)
database: 10
# Redis服务器地址
host: 192.168.19.129
# Redis服务器连接端口
port: 6379
# 连接超时时间(毫秒)
timeout: 5000
# Redis服务器连接密码(默认为空)
password:
pool:
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-active: 8
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池最大连接数(使用负值表示没有限制)
max-wait: -1
然后就是RedisConfig文件的配置了
package com.goobird.hivideo.redis;
import java.lang.reflect.Method;
import java.time.Duration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator KeyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
config = config.entryTtl(Duration.ofMinutes(1)) // 设置缓存的默认过期时间,也是使用Duration设置
.disableCachingNullValues(); // 不缓存空值
// 设置一个初始化的缓存空间set集合
Set<String> cacheNames = new HashSet<>();
cacheNames.add("my-redis-cache1");
cacheNames.add("my-redis-cache2");
// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("my-redis-cache1", config);
configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
RedisCacheManager cacheManager = RedisCacheManager.builder(factory) // 使用自定义的缓存配置初始化一个cacheManager
.initialCacheNames(cacheNames) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
}
还有一点就是记得要添加redis的依赖哦
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
4.对redis进行操作
最后就是对redis进行数据操作了,博主简单的测试了一下,直接上代码
@RequestMapping("/test")
public void test(){
Map<Object,Object> map = new HashMap<>();
//map.put("map","test1");
map.put("map2","test2");
redisTemplate.opsForHash().putAll("redisMap",map);
String s = (String) redisTemplate.opsForHash().get("redisMap", "map2");
/*BoundHashOperations redisMap = redisTemplate.boundHashOps("redisMap");
Set keys = redisMap.keys();
Iterator iterator = keys.iterator();
while(iterator.hasNext()){
Object next = iterator.next();
System.out.println(next+"---"+redisMap.get(next));
}*/
System.out.println(s);
}
最后输出的结果为:
再然后就没有然后拉,结束啦!
服务搭建的过程中,参考了两位大神意见及代码,在万分感谢!
喜欢可以点个赞,原创,转载请注明出处!!!
最后,有疑问的可以和博主私聊!