一、Redis的安装与配置
1、基本描述
(1)定义
Redis是一个典型的非关系型数据库,可以作为消息中间件使用。
(2)版本
6.2.6
2、安装与配置
1 //安装 2 1.下载 wget http://download.redis.io/redis-stable.tar.gz 3 2.解压 tar –zxvf redis-stable.tar.gz 4 3.编译 make 5 4.安装 make install 6 5.查看版本 redis-server -v 7 8 //配置 9 1.在/etc下创建目录redis cd /etc mkdir redis 10 2.在/var下创建目录redis,以及在redis下创建run、data和log cd /var mkdir run data log 11 3.把安装包解压目录里的redis.conf复制到/etc/redis cp redis.conf /etc/redis 12 4.修改redis.conf配置:修改默认端口为6379;修改pid目录为/var/redis/run/redis.pid;修改log目录为/var/redis/log/redis.log;修改数据目录dir为/var/redis/data 13 vi /etc/redis/redis.conf 14 5.启动redis服务 15 redis-server /etc/redis/redis.conf 16 17 //测试 18 1.连接redis客户端 redis-cli 19 2.创建键值对 set key value 20 3.获取键值对 get key 21 22 //其它配置(可选) 23 1.redis可直接通过service redis start/stop脚本命令进行redis服务开始/停止 24 把解压包下的utils目录下redis_init_script文件复制到/etc/init.d目录下; 25 mv redis_init_script redis //文件重命名; 26 修改上面的redis配置文件,把相关的路径更改为正确的即可; 27 使用上述的service命令进行测试 28 2.redis开机自启动 29 chkconfig redis on //执行此命令即可
3、成果
安装redis成功=>
连接redis客户端并创建键值对=>
启动脚本修改成功=>
4、FAQ(问题集锦)
(1)进行配置第五步,即启动redis服务时一直无响应
原因:redis的运行以console方式
解决方法:需要把redis服务运行改为后台运行,重新编辑redis.conf配置文件,将daemonize no改为daemonize yes,重新启动redis服务即可。
二、SpringBoot整合Redis的基本使用
1、整合步骤
1 1、添加Redis相关依赖 2 <!-- 添加redis依赖 --> 3 <dependency> 4 <groupId>org.springframework.boot</groupId> 5 <artifactId>spring-boot-starter-data-redis</artifactId> 6 </dependency> 7 <!--使用lettuce时,需要额外引入commons-pool2依赖包--> 8 <dependency> 9 <groupId>org.apache.commons</groupId> 10 <artifactId>commons-pool2</artifactId> 11 </dependency> 12 2、配置Redis连接信息等 13 #redis连接信息配置 14 spring: 15 redis: 16 host: 192.168.157.131 17 port: 6379 18 password: 19 #jedis: 20 #springboot2.0以上的版本默认使用的是lettuce redis客户端,如果想使用jedis客户端,则需把lettuce依赖进行排除以及手动引入jedis依赖 21 lettuce: 22 pool: 23 max-active: 8 24 max-wait: -1 25 max-idle: 500 26 min-idle: 0 27 3、创建Redis配置类 28 @Configuration 29 public class RedisConfig { //Rdis配置工具,包括序列器配置等 30 @Bean 31 public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){ 32 RedisTemplate<String,Object> template=new RedisTemplate<>(); 33 //关联 34 template.setConnectionFactory(factory); 35 //设置key的序列化器 36 template.setKeySerializer(new StringRedisSerializer()); 37 //设置value的序列器 38 template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class)); 39 return template; 40 } 41 } 42 4、创建测试类 43 @RunWith(SpringRunner.class) 44 @SpringBootTest 45 public class TestRedis1 { //Redis处理键值对缓存的测试类 46 47 @Autowired 48 private RedisTemplate<String,String> redisTemplateStr; //redis存储缓存工具,注入的是StringRedisTemplate实例,@Autowired根据类型寻找Bean 49 //@Resource 未有手动创建配置的RedisTemplate,使用的是自带的默认RedisTemplate 50 @Autowired //手动配置了RedisConfig之后,在spring上下文就存在了RedisTemplate<String,Object>类型的Bean 51 private RedisTemplate<String,Object> redisTemplate; //注入的是RedisTemplate实例,@Resource根据名称寻找Bean 52 53 //测试RedisTemplate<String,String>注入StringRedisTemplate下,设置及获取缓存 54 @Test 55 public void testStringRedisTemplate(){ 56 set("test1","I‘m an enginer!"); 57 get("test1"); 58 } 59 //测试RedisTemplate<String,String>注入手动配置RedisTemplate下,设置及获取缓存 60 @Test 61 public void testRedisTemplateObj(){ 62 //setRT("test2","I‘m an object!"); 63 //getRT("test2"); 64 User user=new User(); 65 user.setId(1001); 66 user.setName("Zhao Yun"); 67 setRT("test3",user); 68 getRT("test3"); 69 } 70 71 //设置缓存 72 public void set(String key,String value){ 73 redisTemplateStr.opsForValue().set(key, value); 74 System.out.println("当前存储键值对为=>key="+key+",value="+value); 75 } 76 77 //获取缓存 78 public void get(String key){ 79 System.out.println("key="+key+",value="+redisTemplateStr.opsForValue().get(key)); 80 } 81 82 //设置缓存 83 public void setRT(String key,Object value){ 84 redisTemplate.opsForValue().set(key, value); 85 System.out.println("当前存储键值对为=>key="+key+",value="+value); 86 } 87 88 //获取缓存 89 public void getRT(String key){ 90 System.out.println("key="+key+",value="+redisTemplate.opsForValue().get(key)); 91 } 92 }
2、成果
//springboot整合redis进行缓存处理成功!!恭喜恭喜!!(使用lettuce客户端以及StringRedisTemplate实例注入以及StringRedisSerializer序列化器)
//springboot整合redis进行缓存处理成功!!恭喜恭喜!!(使用lettuce客户端以及RedisTemplate实例注入以及默认JdkSerializationRedisSerializer序列化器=>通过配置改造为了Jackson2JsonRedisSerializer即转换为了json串)
3、FAQ(问题集锦)
1、添加完redis依赖后,进行maven reload时,所有的其它依赖都不见了?
原因:引入redis依赖出错导致的(把它删除掉重新reload就恢复正常了)
解决方法:把依赖spring-boot-starter-redis改为spring-boot-starter-data-redis重新进行maven reload即可
2、虚拟机能ping通本地windows,但是windows ping不通虚拟机?(起源为secureCRT连接虚拟机失败,Redis访问也是失败)?
原因:虚拟机的桥接方式配置错误
解决方法:虚拟机->编辑->虚拟网络编辑器->更改设置,按下面的图示更改网络类型然后重启虚拟机即可
注:如果上述方法不行,就使用NAT网络模式,基于主机的VMnet8网络进行通信,重启后再确定网络是否正常?如果想进行静态ip设置,请参考链接:https://blog.csdn.net/huanghuang777/article/details/11891555
3、运行test方法后,出现"org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to"?
原因:配置redis服务的时候绑定了本地以及开启了保护模式
解决方法:注释掉bind这条语句,把protected-mode改为no,最后记得重启redis即可
4、运行test方法后,出现"Error creating bean with name 'redisConnectionFactory' defined in class path resource.....nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig"?
原因:使用lettuce这个Redis客户端时,需要额外引入commons-pool2依赖
解决方法:
<!--使用lettuce时,需要额外引入commons-pool2依赖包--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
5、运行test方法后,出现”Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException:“?
原因:redis服务未启动
解决方法:重启redis服务即可,即先stop后start
6、”org.springframework.data.redis.serializer.SerializationException: Cannot serialize; “?
原因:缓存的对象是需要进行序列化后才能存储,实体未进行序列化
解决方法:实体类实现Serialize接口即可