首页 > 编程知识 正文

redissonlock与redissonclient区别,redis enterprise和rediscluster的区别

时间:2023-05-04 10:40:49 阅读:285903 作者:4574

WSL子系统通过docker安装redis,解决宿主机springboot程序访问docker中redis连接失败问题 环境说明

win10 2004

WSL2+ubuntu20.04,已设置清华源+开机自启+已关闭防火墙

docker:19.03.12,且设置了阿里云镜像加速+随WSL子系统开机自启

redis:5.0.7

下载镜像文件 docker pull redis:5.0.7 创建挂载目录

创建redis配置和数据的挂载目录,便于在容器之外调整redis启动配置文件,以及支持数据持久化到容器之外。。

mkdir -p /usr/data/redis/confmkdir -p /usr/data/redis/datacd /usr/data/redis/confvi redis.conf#wq保存退出#添加权限,可选操作,为防止因为权限问题报错可以加一下chmod 777 redis.conf 修改redis.conf配置

首先去官网下载最新配置,传送门

然后在本地创建一个副本,在副本里修改一些配置

bind 127.0.0.1,注释掉这部分,这是限制redis只能本地访问protected-mode,默认为yes,开启保护模式,限制为本地访问,需要改为noappendonly,redis持久化,设置为yes,就能支持redis数据持久化到本地文件requirepass,连接redis密码,设置你的你的密码即可daemonize,默认为no,不需要改动,如果按某些教程改成yes以守护进程启动,会导致配置文件方式启动redis失败port,容器内redis启动端口,可改可不改,后面会用到,这里先列一下

修改完成后的配置,如下所示:

#bind 127.0.0.1port 6379protected-mode nodaemonize noappendonly yesrequirepass 123456 运行redis容器 docker run -p 6379:6379 -d -v /usr/data/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/data/redis/data:/data --restart unless-stopped --name redis redis:5.0.7 redis-server /etc/redis/redis.conf

命令解释:

-p 6379:6379 #宿主机与docker容器端口映射-d #后台启动-v /usr/data/redis/conf/redis.conf:/etc/redis/redis.conf #指定启动配置文件挂载-v /usr/data/redis/data:/data #指定持久化数据挂载目录--restart unless-stopped #指定redis容器重启策略,开启docker,就会自动启动redis容器,除非你自己stop容器--name redis #指定容器名称redis:5.0.7 redis-server /etc/redis/redis.conf #指定使用的镜像,指定启动redis-server,指定启动redis-server的配置文件#-----#通过docker ps,可以看到redis是否启动成功#上面有专门修改redis.conf配置文件,所以用Redis Desktop Manager客户端可以直接连接redis 宿主机springboot集成docker容器redis

用客户端工具连接redis很顺利,但是springboot集成redis简直一言难尽。中间甚至安装了windows版本的redis来验证springboot程序哟偶没有问题,结果是springboot程序集成windows版本的redis一次就成功,但只要一切到WSL子系统里docker容器装的redis,一直报连接失败。

下面先讲下springboot集成redis:

首先是pom.xml

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId></dependency>

需要注意的是springboot2.X连接redis用的是lettuce连接池,所以commons-pool2需要引入一下

application.yml

spring: redis: host: localhost port: 56379 timeout: 10000 password: 123456 testOnBorrow: true testWhileIdle: true database: 0 lettuce: pool: min-idle: 1 max-idle: 5 max-active: 10 max-wait: -1

这里需要注意的是springboot2.X,redis连接池的配置多了lettuce这一层。另外timeout不能配置为0,这里配置的10s。

RedisUtil工具类

@Componentpublic class RedisUtil {@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void setString(String key, String data) {stringRedisTemplate.opsForValue().set(key, data);}}

RedisController类

@RestController@RequestMapping("/redis")public class RedisController { @Autowired private RedisUtil redisUtil; Random random = new Random(); @RequestMapping("/add") public String fun(){ String key="redisDemo:testKey:"; int i = random.nextInt(100); redisUtil.setString(key+i,i+""); return "ok"; }}

打开浏览器,访问http://localhost:8080/redis/add,一直报连接失败异常,Could not connect to Redis at localhost:6379: Connection refused。

最开始考虑是redis服务有问题,但是用Redis Desktop Manager客户端直接访问又没有问题,而且试了调整各种参数都不行。

后面怀疑是不是springboot集成redis有问题,就在本机装了windows版的redis,把redis地址切到本机windos版本的redis后,立马就能add数据成功了。

最后查了很多资料,才终于把问题解决。

解决宿主机springboot集成docker容器redis连接失败问题

其实就改了一下docker run命令:

docker run --net host -d -v /usr/data/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/data/redis/data:/data --restart unless-stopped --name redis redis:5.0.7 redis-server /etc/redis/redis.conf

加了–net host命令,指定容器与宿主机共用网络。

因为容器与宿主机共用网络,所以就没必要再做端口映射了,想让哪个端口作为redis服务的端口,修改redis.conf文件即可。

极速赛车位置相加减公式图eIdle: true database: 0 lettuce: pool: min-idle: 1 max-idle: 5 max-active: 10 max-wait: -1

这里需要注意的是springboot2.X,redis连接池的配置多了lettuce这一层。另外timeout不能配置为0,这里配置的10s。

RedisUtil工具类

@Componentpublic class RedisUtil {@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void setString(String key, String data) {stringRedisTemplate.opsForValue().set(key, data);}}

RedisController类

@RestController@RequestMapping("/redis")public class RedisController { @Autowired private RedisUtil redisUtil; Random random = new Random(); @RequestMapping("/add") public String fun(){ String key="redisDemo:testKey:"; int i = random.nextInt(100); redisUtil.setString(key+i,i+""); return "ok"; }}

打开浏览器,访问http://localhost:8080/redis/add,一直报连接失败异常,Could not connect to Redis at localhost:6379: Connection refused。

最开始考虑是redis服务有问题,但是用Redis Desktop Manager客户端直接访问又没有问题,而且试了调整各种参数都不行。

后面怀疑是不是springboot集成redis有问题,就在本机装了windows版的redis,把redis地址切到本机windos版本的redis后,立马就能add数据成功了。

最后查了很多资料,才终于把问题解决。

解决宿主机springboot集成docker容器redis连接失败问题

其实就改了一下docker run命令:

docker run --net host -d -v /usr/data/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/data/redis/data:/data --restart unless-stopped --name redis redis:5.0.7 redis-server /etc/redis/redis.conf

加了–net host命令,指定容器与宿主机共用网络。

因为容器与宿主机共用网络,所以就没必要再做端口映射了,想让哪个端口作为redis服务的端口,修改redis.conf文件即可。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。