背景:
在项目压力测试期间出现单线程的redis操作读写有时对线程资源的竞争情况,导致在获取不到数据,或者获取数据的时候出现数据丢失的情况。
需求:
在大并发的时候,可以有效的对redis缓存进行操作,不会因为单线程的的资源竞争导致无效的操作。
技术实现:
既然知道是在并发的情况下,因为redis资源的竞争,导致的无效操作。那么为了避免这种资源竞争,可以通过redis集群的方式来实现数据的一致性,下面来看一下最简单的集群方式:一主一从的实现。
- redis-server及redis-cli等相关依赖的软件安装。
- 安装好以后拷贝redis.conf 到/etc/目录下面
- 修改配置文件中的一下选项
1 #bind 127.0.0.1 2 protected-mode yes 3 port 6379 4 daemonize yes 5 requirepass passwd
- 启动redis-server服务器
1 /usr/local/bin/redis-server /etc/redis.conf
- 查看服务是否启动
1 [root@localhost bin]# ps aux | grep redis 2 root 1659 0.0 0.0 139132 9724 ? Ssl 09:30 0:02 /usr/local/bin/redis-server 192.168.171.118:6379 3 root 4898 0.0 0.0 137084 7688 ? Ssl 09:51 0:02 /usr/local/bin/redis-server 192.168.171.118:6380 4 root 12279 0.0 0.0 112820 976 pts/1 S+ 11:17 0:00 grep --color=auto redis
- 配置从服务器配置文件,
- 拷贝redis.conf配置文件copy_redis..conf
- 修改一下选项
#bind 127.0.0.1
protected-mode yes
port 6380
daemonize yes
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
# masterauth <master-passwor#d>
masterauth passwd
pidfile /usr/local/redis/redis_6380.pid
requirepass passwd
- 启动从服务器
1 /usr/local/bin/redis-server /etc/copy_redis.conf
- 通过redis-cli查看主从模式的redis集群信息
1 info replication
显示信息如下
1 [root@localhost bin]# redis-cli -h 127.0.0.1 -p 6379 2 127.0.0.1:6379> AUTH passwd 3 OK 4 127.0.0.1:6379> info replication 5 # Replication 6 role:master 7 connected_slaves:1 8 slave0:ip=127.0.0.1,port=6380,state=online,offset=8158,lag=1 9 master_repl_offset:8158 10 repl_backlog_active:1 11 repl_backlog_size:1048576 12 repl_backlog_first_byte_offset:2 13 repl_backlog_histlen:8157 14 127.0.0.1:6379>
切记,主从模式下从服务器可以当做读服务器,写数据的话是不会成功的,所以到时候不要一头雾水