Redis整理篇

redis整理

github
官网

理论知识

怎么理解redis?

  • 基于内存操作
  • 单线程单核cpu操作,减少了cpu多线程上下文切换时间
  • 支持5种数据类型的 k - v 集合,本质就是map集合
  • 支持两种数据落磁盘存储方式:AOF ,RDP
  • 支持集群部署

五种数据类型

string

新增、查询、更新、删除
普通
[root@localhost bin]# ./redis-cli -p 6379 -a itchun123
127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> set test 432
OK
127.0.0.1:6379> get test
"432"
127.0.0.1:6379> del test
(integer) 1
127.0.0.1:6379> get test
(nil)
127.0.0.1:6379> 
判断是否存在

若key存在返回1,否则返回0

127.0.0.1:6379> exists test 
(integer) 0
127.0.0.1:6379> exists test1
(integer) 1
127.0.0.1:6379> 
条件新增

nx: 不存在则新增,否则返回0

127.0.0.1:6379> setnx test aa
(integer) 1
127.0.0.1:6379> setnx test 123
(integer) 0
批量添加
127.0.0.1:6379> MSET test 333 test1 234
OK
127.0.0.1:6379> get test1
"234"
127.0.0.1:6379> 
有效时间的key
设置

整体命令:set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]

  • NX: 只有当key不存在的时候,才会创建key的值value
  • XX: 只有当key存在的时候,才会创建key的值value
  • GET:如果key的值是字符串类型,则返回key的旧值,如果key的值不是字符串类型,则报错,如果key不存在,则返回null
  • EX seconds: 有效时间秒
  • PX milliseconds:有效时间毫秒
刷新有效时间

expire key seconds [NX|XX|GT|LT]

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> expire test 20
(integer) 1
127.0.0.1:6379> PTTL test
(integer) 15929
127.0.0.1:6379> PTTL test
(integer) 14159
127.0.0.1:6379> PTTL test
(integer) 13366
127.0.0.1:6379> PTTL test
(integer) 12731
127.0.0.1:6379> PTTL test
(integer) 12037
127.0.0.1:6379> PTTL test
(integer) 10546
127.0.0.1:6379> PTTL test
(integer) 9730
127.0.0.1:6379> PTTL test
(integer) 8976
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> get test
(nil)
127.0.0.1:6379> 
过期时间查询

查询key的过期时间还剩余的秒数,不存在的key,返回-2,永久的key返回-1

127.0.0.1:6379> PTTL test
(integer) -1
127.0.0.1:6379>
原子级数增减操作
新增

key的值会先被初始化为0 ,然后再执行 INCR 操作,返回为1。

127.0.0.1:6379> INCR add
(integer) 1
127.0.0.1:6379> get add
"1"
127.0.0.1:6379> 
减少

key的值会先被初始化为 0 ,然后再执行DECR操作,返回为-1。

127.0.0.1:6379> decr add
(integer) 0
127.0.0.1:6379> get add
"0"
127.0.0.1:6379> 
指定新增
127.0.0.1:6379> incrby add 11
(integer) 11
127.0.0.1:6379> get add
"11"
127.0.0.1:6379>
指定减少
127.0.0.1:6379> decrby add 1
(integer) 11
127.0.0.1:6379> get add
"10"
127.0.0.1:6379>
迭代模糊查询key
keys 命令

keys patten patten为正则表达式,redis中的key越多,造成redis阻塞的时间越长

  • *:通配任意多个字符
  • ?::通配单个字符
  • []:通配括号内的某1个字符
127.0.0.1:6379> keys test*
1) "test2"
2) "test1"
127.0.0.1:6379> 
scan 命令

scan cursor [match pattern] [count count] [TYPE type] ,非阻塞的方式遍历,类似的有 sscan 、zscan、hscan

  • cursor:游标数字,从0开始,每次返回下次执行返回下次游标数字,一次全部遍历结束,也返回0
  • match pattern:正则匹配条件
  • count count :扫描哈希槽的数量,不是数据返回的条数,默认10,
  • TYPE type:返回类型
127.0.0.1:6379> scan 0
1) "7"
2)  1) "key:9"
    2) "key:8"
    3) "key:10"
    4) "key:1"
    5) "key:3"
    6) "key:4"
    7) "key:6"
    8) "key:11"
    9) "add"
   10) "key:2"
   11) "test1"
127.0.0.1:6379> scan 7
1) "0"
2) 1) "key:7"
   2) "key:5"
   3) "test2"
127.0.0.1:6379> 
127.0.0.1:6379> scan 0 match key:* count 5
1) "1"
2) 1) "key:9"
   2) "key:8"
   3) "key:10"
   4) "key:1"
   5) "key:3"
   6) "key:4"
127.0.0.1:6379> scan 1 match key:* count 5
1) "7"
2) 1) "key:6"
   2) "key:11"
   3) "key:2"
127.0.0.1:6379> scan 7 match key:* count 5
1) "0"
2) 1) "key:7"
   2) "key:5"
127.0.0.1:6379> 

set 无序集合

  • 集合中无重复数据
127.0.0.1:6379> sadd test 123 3434 43534
(integer) 3
127.0.0.1:6379> scard test #统计集合总数
(integer) 3
127.0.0.1:6379> sinter test #返回集合全部成员
1) "123"
2) "3434"
3) "43534"
127.0.0.1:6379> sismember test 123 #判断集合中是否存在key
(integer) 1
127.0.0.1:6379> expire test 20 #给集合设置有效时间
(integer) 1
127.0.0.1:6379> PTTL test #20后查询集合剩余有效时间 -2 代表集合已过期
(integer) -2
127.0.0.1:6379> sinter test #重新查询集合全部成员
(empty array)
127.0.0.1:6379> 

zset 有序集合

新增

zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

  • XX:仅更新已存在的member
  • NX:仅新增member,这个member是原先不存在的
  • LT:仅更新存在并且新的score小于原来的score的member
  • GT: 仅更新存在并且新的score大于原来的score的member。
  • CH:表示返回值是返回被修改的数量(包括:新增和更新)。默认是仅返回新增的数量
  • INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。
查询

zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

127.0.0.1:6379> zrange ztest 0 2
1) "12312"
2) "124"
3) "23"
127.0.0.1:6379> 

hash

存储对象,相比于string json序列化,hash存储更快,占用空间更小,节省了序列化的时间。常用于对象存储,例如购物车、商品等

127.0.0.1:6379> hmset demo id 1 name xiaoming 
OK
127.0.0.1:6379> hmget demo id
1) "1"
127.0.0.1:6379> hmset demo class 01
OK
127.0.0.1:6379> hmget demo class
1) "01"
127.0.0.1:6379> hgetall demo 
1) "id"
2) "1"
3) "name"
4) "xiaoming"
5) "class"
6) "01"
127.0.0.1:6379> hkeys demo
1) "id"
2) "name"
3) "class"
127.0.0.1:6379> hvals demo
1) "1"
2) "xiaoming"
3) "01"
127.0.0.1:6379> 

list

列表中的元素都是有序的,可以两端插入(push)和弹出(pop),可以做消息队列,可以充当栈和队列的角色

左边插入,右边弹出,查询全部
127.0.0.1:6379> lpush ldemo 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange ldemo 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpop ldemo 2
1) "1"
2) "2"
127.0.0.1:6379> lrange ldemo 0 -1
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> 
右插入,左边弹出,查询全部
127.0.0.1:6379> rpush ldemo 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange ldemo 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpop ldemo 2
1) "1"
2) "2"
127.0.0.1:6379> lrange ldemo 0 -1
1) "3"
2) "4"
3) "5"
127.0.0.1:6379> 
修改

修改指定下标的元素
lset key index newValue:修改指定下标的元素

阻塞弹出

brpop

使用场景
  • 秒杀,将商品对应的数据存储在list中,使用lpop或者rpop弹出数据,在高并发的场景中,依然线程安全,不会出现超卖或者商品数量为负数;
  • 消息队列: lpush + brpop, 生产者使用lpush从列表的左边添加数据,多个消费客户端使用brpop命令阻塞式的争抢列表尾部的元素,因为是阻塞的,在多个消费者客户端的情况下保证了负载均衡和并发安全高可用

stream

大key问题

寻找大key

  1. 自带命令 ./redis-cli -p 6381 -a itchun123 --bigkeys
仅能找出6中数据类型中最大的key

在这里插入图片描述
2. rdb_bigkeys工具 - 不支持 rdb8 以上
下载源码:https://github.com/weiyanwei412/rdb_bigkeys
编译生成:rdb_bigkeys文件

[root@localhost rdb_bigkeys-1.0]# ll
total 2164
-rw-r--r--. 1 root root     107 Aug 23 16:23 bigkeys.csv
-rw-rw-r--. 1 root root    6467 Apr 22  2018 comfuncs.go
-rw-r--r--. 1 root root     111 Aug 23 16:10 go.mod
-rw-r--r--. 1 root root     219 Aug 23 16:10 go.sum
-rw-rw-r--. 1 root root   35147 Apr 22  2018 LICENSE
-rw-rw-r--. 1 root root    4030 Apr 22  2018 memcallback.go
drwxrwxr-x. 3 root root      17 Apr 22  2018 misc
-rwxr-xr-x. 1 root root 2143598 Aug 23 16:10 rdb_bigkeys
-rw-rw-r--. 1 root root    2193 Apr 22  2018 rdb_bigkeys.go
-rw-rw-r--. 1 root root     960 Apr 22  2018 README.md
[root@localhost rdb_bigkeys-1.0]# 

执行命令:./rdb_bigkeys --bytes 1024 --file bigkeys_6379.csv --sep 0 --sorted --threads 4 dump6379.rdb 导出key大于1024bytes的key到excel文件

  1. rdr 工具
    下载地址:https://github.com/xueqiu/rdr/releases

在这里插入图片描述

生成json格式

[root@localhost datahome]# ./rdr-linux dump /datahome/redis7.0.2/dump.rdb

生成web

[root@localhost datahome]# ./rdr show -p 8080 /datahome/redis7.0.2/dump.rdb 
start parsing...
parse /datahome/redis7.0.2/dump.rdb  done
parsing finished, please access http://{$IP}:8080

在这里插入图片描述

  1. redis-rdb-tools
    源码地址:https://github.com/sripathikrishnan/redis-rdb-tools

dump文件的导出导入

参考文献地址:https://blog.csdn.net/lyshark_lyshark/article/details/125846805
github: https://github.com/delano/redis-dump

部署

单节点

linux版

redis服务端下载

仓库地址
官网下载
百度网盘下载(7.0.2) 提取码:q6uh
华为镜像下载

yum安装
[root@localhost datahome]# yum install gcc-c++
[root@localhost datahome]# wget http://download.redis.io/releases/redis-7.0.2.tar.gz
--2022-07-07 14:47:17--  http://download.redis.io/releases/redis-7.0.2.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2956784 (2.8M) [application/octet-stream]
Saving to: ‘redis-7.0.2.tar.gz’

100%[=====================================================================================================================================================================================>] 2,956,784    293KB/s   in 10s    

2022-07-07 14:47:28 (283 KB/s) - ‘redis-7.0.2.tar.gz’ saved [2956784/2956784]
[root@localhost datahome]# tar -zxvf redis-7.0.2.tar.gz
[root@localhost datahome]# cd redis-7.0.2/
[root@localhost redis-7.0.2]# ll
total 256
-rw-rw-r--.  1 root root  32015 Jun 12 21:00 00-RELEASENOTES
-rw-rw-r--.  1 root root     51 Jun 12 21:00 BUGS
-rw-rw-r--.  1 root root   5026 Jun 12 21:00 CONDUCT
-rw-rw-r--.  1 root root   2634 Jun 12 21:00 CONTRIBUTING
-rw-rw-r--.  1 root root   1487 Jun 12 21:00 COPYING
drwxrwxr-x.  7 root root    119 Jun 12 21:00 deps
-rw-rw-r--.  1 root root     11 Jun 12 21:00 INSTALL
-rw-rw-r--.  1 root root    151 Jun 12 21:00 Makefile
-rw-rw-r--.  1 root root   6888 Jun 12 21:00 MANIFESTO
-rw-rw-r--.  1 root root  22435 Jun 12 21:00 README.md
-rw-rw-r--.  1 root root 106547 Jun 12 21:00 redis.conf
-rwxrwxr-x.  1 root root    279 Jun 12 21:00 runtest
-rwxrwxr-x.  1 root root    283 Jun 12 21:00 runtest-cluster
-rwxrwxr-x.  1 root root   1578 Jun 12 21:00 runtest-moduleapi
-rwxrwxr-x.  1 root root    285 Jun 12 21:00 runtest-sentinel
-rw-rw-r--.  1 root root   1695 Jun 12 21:00 SECURITY.md
-rw-rw-r--.  1 root root  13924 Jun 12 21:00 sentinel.conf
drwxrwxr-x.  4 root root   8192 Jun 12 21:00 src
drwxrwxr-x. 11 root root    199 Jun 12 21:00 tests
-rw-rw-r--.  1 root root   3055 Jun 12 21:00 TLS.md
drwxrwxr-x.  8 root root   4096 Jun 12 21:00 utils
[root@localhost redis-7.0.2]# make && make PREFIX=/datahome/redis7.0.2 install
[root@localhost redis-7.0.2]# cp redis.conf /datahome/redis7.0.2/
[root@localhost redis-7.0.2]# mv /datahome/redis7.0.2/redis.conf /datahome/redis7.0.2/redis_6379.conf
[root@localhost redis-7.0.2]# cd ..
[root@localhost datahome]# rm -rf redis-7.0.2
[root@localhost datahome]# rm -rf redis-7.0.2.tar.gz 
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof

bin目录下脚本文件说明

redis-benchmark    # 性能测试工具,查看本地性能如何
redis-check-aof    # 修复有问题的AOF文件
redis-check-rdb    # 修复有问题的rdb文件
redis-sentinel     # redis 集群使用
redis-server       # redis服务启动命令
redis-cli          # 客服端连接
离线安装

redis服务
官网下载首页
官网下载(7.0.2)
百度网盘下载(7.0.2) 提取码:q6uh
gcc安装包 提取码:hwmj
上传文件
在这里插入图片描述

[root@localhost redis-7.0.2]# cd /datahome/install
[root@localhost redis-7.0.2]# tar -zxvf redis-7.0.2.tar.gz
[root@localhost redis-7.0.2]# cd redis-7.0.2
[root@localhost redis-7.0.2]# make && make PREFIX=/datahome/redis7.0.2 install
[root@localhost redis-7.0.2]# cp redis.conf /datahome/redis7.0.2/
[root@localhost redis-7.0.2]# cd /datahome
[root@localhost datahome]# rm -rf install/redis-7.0.2
[root@localhost datahome]# rm -rf install/redis-7.0.2.tar.gz 
[root@localhost datahome]# rm -rf install/gcc离线安装包
[root@localhost redis-7.0.2]# mv /datahome/redis7.0.2/redis.conf /datahome/redis7.0.2/redis_6379.conf
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof

wind版

下载

github下载
在这里插入图片描述

百度云下载 提取码:ddzs

进行解压

在这里插入图片描述
双击 【redis-server.exe】进行启动

redis连接客户端(wind免费版)

链接:https://pan.baidu.com/s/1GY-4NZlhez2hZH3aOPJT_g
提取码:84vd
双击安装
在这里插入图片描述

集群(linux环境下 redis7.0.2)

主从模式1主1从

启动master
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof
[root@localhost bin]# ./redis-cli -p 6379 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6380> 
启动slave(只读)
[root@localhost datahome]# cp /datahome/redis7.0.2/redis_6379.conf /datahome/redis7.0.2/redis_6380.conf 
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6380.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	replicaof 127.0.0.1 6379
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6380.conf --port 6380 --pidfile /datahome/redis7.0.2/redis_6380.pid --logfile /datahome/redis7.0.2/redis_6380.log --dbfilename dump_6380.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6380.aof --replica-read-only no
[root@localhost bin]# ./redis-cli -p 6380 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:slave
	master_host:127.0.0.1
	master_port:6379
	master_link_status:up
	master_last_io_seconds_ago:1
	master_sync_in_progress:0
	slave_read_repl_offset:5754
	slave_repl_offset:5754
	slave_priority:100
	slave_read_only:1
	replica_announced:1
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:7cf4022d6b906d0728ffc1578797d4c763eb41f3
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:5754
	second_repl_offset:-1
	repl_backlog_active:1
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:1
	repl_backlog_histlen:5754
127.0.0.1:6380> 
说明
参数 replica-read-only yes

说明:如果为yes,slave实例只读,如果为no,slave实例可读可写。

设置 yes:
	127.0.0.1:6380> set aa aa
	(error) READONLY You can't write against a read only replica.

设置 no :  
	1. 即使在从节点set 值。也只能在该从节点get到值
	2. 从节点一旦与主节点进行一次同步,就会被主节点数据覆盖掉

主从+哨兵

启动1主2从
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof
[root@localhost bin]# ./redis-cli -p 6379 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6380> 
[root@localhost datahome]# cp /datahome/redis7.0.2/redis_6379.conf /datahome/redis7.0.2/redis_6380.conf 
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6380.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	replicaof 127.0.0.1 6379
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6380.conf --port 6380 --pidfile /datahome/redis7.0.2/redis_6380.pid --logfile /datahome/redis7.0.2/redis_6380.log --dbfilename dump_6380.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6380.aof --replica-read-only no
[root@localhost bin]# ./redis-cli -p 6380 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:slave
	master_host:127.0.0.1
	master_port:6379
	master_link_status:up
	master_last_io_seconds_ago:1
	master_sync_in_progress:0
	slave_read_repl_offset:5754
	slave_repl_offset:5754
	slave_priority:100
	slave_read_only:1
	replica_announced:1
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:7cf4022d6b906d0728ffc1578797d4c763eb41f3
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:5754
	second_repl_offset:-1
	repl_backlog_active:1
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:1
	repl_backlog_histlen:5754
127.0.0.1:6380> 
[root@localhost datahome]# cp /datahome/redis7.0.2/redis_6380.conf /datahome/redis7.0.2/redis_6381.conf 
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6381.conf --port 6381 --pidfile /datahome/redis7.0.2/redis_6381.pid --logfile /datahome/redis7.0.2/redis_6381.log --dbfilename dump_6381.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6381.aof --replica-read-only no --replica-priority 90
[root@localhost bin]# ./redis-cli -p 6381 -a itchun123
127.0.0.1:6381> info replication
	# Replication
	role:slave
	master_host:127.0.0.1
	master_port:6379
	master_link_status:up
	master_last_io_seconds_ago:3
	master_sync_in_progress:0
	slave_read_repl_offset:262122
	slave_repl_offset:262122
	slave_priority:90
	slave_read_only:0
	replica_announced:1
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:bf5382cd09933d7c6f0a83bad8d5edcf6f485a26
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:262122
	second_repl_offset:-1
	repl_backlog_active:1
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:261885
	repl_backlog_histlen:238
127.0.0.1:6381> 
启动3哨兵
[root@localhost bin]# mkdir /datahome/redis7.0.2/26379
[root@localhost bin]# vim /datahome/redis7.0.2/sentinel_26379.conf
	daemonize yes
	port 26379
	pidfile /datahome/redis7.0.2/redis-sentinel_26379.pid
	dir /datahome/redis7.0.2/26379
	logfile /datahome/redis7.0.2/redis-sentinel_26379.log
	sentinel monitor localhost 192.168.1.188 6379 2
	sentinel auth-pass localhost itchun123
[root@localhost redis7.0.2]# /datahome/redis7.0.2/bin/redis-sentinel /datahome/redis7.0.2/sentinel_26379.conf
[root@localhost bin]# mkdir /datahome/redis7.0.2/26380
[root@localhost bin]# vim /datahome/redis7.0.2/sentinel_26380.conf
	daemonize yes
	port 26380
	pidfile /datahome/redis7.0.2/redis-sentinel_26380.pid
	dir /datahome/redis7.0.2/26379
	logfile /datahome/redis7.0.2/redis-sentinel_26380.log
	sentinel monitor localhost 192.168.1.188 6379 2
	sentinel auth-pass localhost itchun123
[root@localhost redis7.0.2]# /datahome/redis7.0.2/bin/redis-sentinel /datahome/redis7.0.2/sentinel_26380.conf
[root@localhost bin]# mkdir /datahome/redis7.0.2/26381
[root@localhost bin]# vim /datahome/redis7.0.2/sentinel_26381.conf
	daemonize yes
	port 26381
	pidfile /datahome/redis7.0.2/redis-sentinel_26381.pid
	dir /datahome/redis7.0.2/26381
	logfile /datahome/redis7.0.2/redis-sentinel_26381.log
	sentinel monitor localhost 192.168.1.188 6379 2
	sentinel auth-pass localhost itchun123
[root@localhost redis7.0.2]# /datahome/redis7.0.2/bin/redis-sentinel /datahome/redis7.0.2/sentinel_26381.conf
[root@localhost bin]# ./redis-cli -p 26380
127.0.0.1:26380> info sentinel
	# Sentinel
	sentinel_masters:2
	sentinel_tilt:0
	sentinel_tilt_since_seconds:-1
	sentinel_running_scripts:0
	sentinel_scripts_queue_length:0
	sentinel_simulate_failure_flags:0
	master0:name=mymaster,status=sdown,address=127.0.0.1:6379,slaves=0,sentinels=1
	master1:name=localhost,status=ok,address=192.168.1.188:6379,slaves=4,sentinels=3
127.0.0.1:26380>
关闭master,应该6381成为master
[root@localhost ~]# /datahome/redis7.0.2/bin/redis-cli -p 6379 shutdown
[root@localhost ~]# /datahome/redis7.0.2/bin/redis-cli -p 6380 -a itchun123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6380> info replication
	# Replication
	role:slave
	master_host:192.168.1.188
	master_port:6381
	master_link_status:up
	master_last_io_seconds_ago:17
	master_sync_in_progress:0
	slave_read_repl_offset:467082
	slave_repl_offset:467082
	slave_priority:100
	slave_read_only:0
	replica_announced:1
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:aea7c2f4a3aa0ed33ca7d9725d0bda784a320903
	master_replid2:bf5382cd09933d7c6f0a83bad8d5edcf6f485a26
	master_repl_offset:467082
	second_repl_offset:463528
	repl_backlog_active:1
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:1
	repl_backlog_histlen:467082
127.0.0.1:6380> 
[root@localhost bin]# ./redis-cli -p 26380
127.0.0.1:26380> info sentinel
	# Sentinel
	sentinel_masters:2
	sentinel_tilt:0
	sentinel_tilt_since_seconds:-1
	sentinel_running_scripts:0
	sentinel_scripts_queue_length:0
	sentinel_simulate_failure_flags:0
	master0:name=mymaster,status=sdown,address=127.0.0.1:6379,slaves=0,sentinels=1
	master1:name=localhost,status=ok,address=192.168.1.188:6381,slaves=4,sentinels=3
127.0.0.1:26380>

集群模式

192.168.1.188 启动 3个节点
192.168.1.136 启动 3个节点

192.168.1.188 启动 3个节点
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6379.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6379 -a itchun123
127.0.0.1:6379> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6379> 
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6380.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6380.conf --port 6380 --pidfile /datahome/redis7.0.2/redis_6380.pid --logfile /datahome/redis7.0.2/redis_6380.log --dbfilename dump_6380.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6380.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6380.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6380 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6381> [root@localhost datahome]# vim /datahome/redis7.0.2/redis_6381.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6381.conf --port 6381 --pidfile /datahome/redis7.0.2/redis_6381.pid --logfile /datahome/redis7.0.2/redis_6381.log --dbfilename dump_6381.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6381.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6381.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6381 -a itchun123
127.0.0.1:6381> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6381> 
192.168.1.136 启动 3个节点
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6379.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6379.conf --port 6379 --pidfile /datahome/redis7.0.2/redis_6379.pid --logfile /datahome/redis7.0.2/redis_6379.log --dbfilename dump_6379.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6379.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6379.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6379 -a itchun123
127.0.0.1:6379> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6379> 
[root@localhost datahome]# vim /datahome/redis7.0.2/redis_6380.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6380.conf --port 6380 --pidfile /datahome/redis7.0.2/redis_6380.pid --logfile /datahome/redis7.0.2/redis_6380.log --dbfilename dump_6380.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6380.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6380.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6380 -a itchun123
127.0.0.1:6380> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6381> [root@localhost datahome]# vim /datahome/redis7.0.2/redis_6381.conf
	bind 0.0.0.0
	daemonize yes
	save 900 1
	save 300 10
	save 60 10000
	requirepass itchun123
	appendonly yes
	masterauth itchun123
[root@localhost datahome]# cd /datahome/redis7.0.2/bin
[root@localhost bin]# ./redis-server /datahome/redis7.0.2/redis_6381.conf --port 6381 --pidfile /datahome/redis7.0.2/redis_6381.pid --logfile /datahome/redis7.0.2/redis_6381.log --dbfilename dump_6381.rdb --dir /datahome/redis7.0.2/ --appendfilename appendonly_6381.aof --cluster-enabled yes --cluster-config-file /datahome/redis7.0.2/nodes-6381.conf --cluster-node-timeout 5000
[root@localhost bin]# ./redis-cli -p 6381 -a itchun123
127.0.0.1:6381> info replication
	# Replication
	role:master
	connected_slaves:0
	master_failover_state:no-failover
	master_replid:e14422d2b057b4f1559ad28d334c7fc3bab5ea39
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:0
	second_repl_offset:-1
	repl_backlog_active:0
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:0
	repl_backlog_histlen:0
127.0.0.1:6381> 
创建集群
[root@localhost bin]# ./redis-cli --cluster create 192.168.1.136:6379 192.168.1.136:6380 192.168.1.136:6381 192.168.1.188:6379 192.168.1.188:6380 192.168.1.188:6381 --cluster-replicas 1 -a itchun123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.188:6381 to 192.168.1.136:6379
Adding replica 192.168.1.136:6381 to 192.168.1.188:6379
Adding replica 192.168.1.188:6380 to 192.168.1.136:6380
M: e9f1425916c6dfbe975ace64f4029385ab48ebbc 192.168.1.136:6379
   slots:[0-5460] (5461 slots) master
M: 4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89 192.168.1.136:6380
   slots:[10923-16383] (5461 slots) master
S: 8435c16f3bee6bb16da8f28d222be1b9a6990da5 192.168.1.136:6381
   replicates d07703ae7eb9568d99f1e8ddc6b31759e647a79c
M: d07703ae7eb9568d99f1e8ddc6b31759e647a79c 192.168.1.188:6379
   slots:[5461-10922] (5462 slots) master
S: e28ea5e631456b1bb8b2ee47ce56577fadd181d1 192.168.1.188:6380
   replicates 4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89
S: 918733e63dd8f779a461c0f810612b1cd574ab34 192.168.1.188:6381
   replicates e9f1425916c6dfbe975ace64f4029385ab48ebbc
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.1.136:6379)
M: e9f1425916c6dfbe975ace64f4029385ab48ebbc 192.168.1.136:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89 192.168.1.136:6380
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: d07703ae7eb9568d99f1e8ddc6b31759e647a79c 192.168.1.188:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 8435c16f3bee6bb16da8f28d222be1b9a6990da5 192.168.1.136:6381
   slots: (0 slots) slave
   replicates d07703ae7eb9568d99f1e8ddc6b31759e647a79c
S: 918733e63dd8f779a461c0f810612b1cd574ab34 192.168.1.188:6381
   slots: (0 slots) slave
   replicates e9f1425916c6dfbe975ace64f4029385ab48ebbc
S: e28ea5e631456b1bb8b2ee47ce56577fadd181d1 192.168.1.188:6380
   slots: (0 slots) slave
   replicates 4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost bin]# ./redis-cli -c -p 6379 -a itchun123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> cluster nodes
d07703ae7eb9568d99f1e8ddc6b31759e647a79c 192.168.1.188:6379@16379 myself,master - 0 1658320519000 4 connected 5461-10922
918733e63dd8f779a461c0f810612b1cd574ab34 192.168.1.188:6381@16381 slave e9f1425916c6dfbe975ace64f4029385ab48ebbc 0 1658320522341 1 connected
e9f1425916c6dfbe975ace64f4029385ab48ebbc 192.168.1.136:6379@16379 master - 0 1658320521340 1 connected 0-5460
e28ea5e631456b1bb8b2ee47ce56577fadd181d1 192.168.1.188:6380@16380 slave 4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89 0 1658320520538 2 connected
8435c16f3bee6bb16da8f28d222be1b9a6990da5 192.168.1.136:6381@16381 slave d07703ae7eb9568d99f1e8ddc6b31759e647a79c 0 1658320521000 4 connected
4f3ffb96be4ee5cf2e5c19765c8e43bb03661d89 192.168.1.136:6380@16380 master - 0 1658320521000 2 connected 10923-16383
127.0.0.1:6379> set aa test
-> Redirected to slot [1180] located at 192.168.1.136:6379
OK
192.168.1.136:6379> get aa
"test"
192.168.1.136:6379> 
[root@localhost bin]# ./redis-cli -c -p 6379 -a itchun123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> get aa
-> Redirected to slot [1180] located at 192.168.1.136:6379
"test"
192.168.1.136:6379> 

使用

与springboot整合

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.nio.charset.StandardCharsets;

@Configuration
public class RedisConfigurer {

    @Bean
    public RedisTemplate<String, ?> redisCacheTemplate(LettuceConnectionFactory factory) {
        RedisTemplate<String, ?> template = new RedisTemplate<>();
        // 自定义redis序列化 读出redis反序列化报错配置
        FastJsonRedisSerializerConfigurer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializerConfigurer<>(Object.class);
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        // fastjson把对象转换成json避免$ref SerializerFeature.DisableCircularReferenceDetect d
        fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteClassName);
        fastJsonConfig.setCharset(StandardCharsets.UTF_8);
        fastJsonRedisSerializer.setFastJsonConfig(fastJsonConfig);
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(factory);
        return template;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值