1.创建文件路径
/root/redis/redis01/conf
/root/redis/redis01/data
2.接下来就是去官网下载对于linux版本下的redis地址
3.接下来修改conf配置文件部分内容
注释掉bind 127.0.0.1以便外网访问
设置redis密码以便安全
开启过期通知功能
打开redis配置文件,修改notify-keyspace-events "" 为 notify-keyspace-events Ex
但是后续还需要重启redis服务
docker run -p 6380:6379 --name redis -v /root/redis/redis01/conf/redis.conf:/etc/redis/redis.conf -v /root/redis/redis01/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
解释一下上面命令的意义
-d:表示后台运行,不加-d执行上面的命令你就会看到redis启动的日志信息了
-p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口,而右侧则表示的是mysql容器内的端口
--name:是我们给redis容器取的名字
-v:表示挂载路径,$PWD表示当前目录下,冒号左面的表示我们宿主机的挂载目录,也就是我们虚拟机所在的文件路径,冒号右边则表是的是redis容器在容器内部的路径,上面的命令我分别挂载了redis.conf(redis的配置文件),如需使用配置文件的方式启动redis,这里则需要加上,还有redis存放数据所在的目录
--appendonly yes:表示redis开启持久化策略
/**
* Redis缓存配置类
*/
@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis数据失效事件,进行数据处理
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// message.toString()可以获取失效的key
String expiredKey = message.toString();
System.out.println(expiredKey);
}
}
目前存在缺陷:只能获取到失效的key,但是此时不能根据key获取value值,因为该事件是在数据失效后才触发(可以将value拼接到key上,截取)