Redis 应用
作者:互联网
Redis 应用
目录
一、Redis 应用
1.1.1 Redis 介绍
- Redis 介绍
Redis 是一种基于键值对(key value)的 NoSQL(非关系型) 数据库,与很多键值对数据库不同,
redis 中的值可以有 string,hash,list,set,zset,geo 等多种数据结构和算法组成. 因为 Redis
会将所有的数据都放在内存中,所以他的读写性能非常惊人. 不仅如此,Redis
还可以将内存中的数据利用快照和日志的形式保存到硬盘上 Redis 还提供了键过期,发布订阅,事务,流水线等附加功能.
- Redis 特点
1.速度快 Redis 所有的数据都存放在内存中 Redis 使用 C 语言实现 Redis 使用单线程架构
2.基于键值对的数据结构服务器 支持5种数据结构:字符串,哈希,列表,集合,有序集合
3.丰富的功能 提供了键过期功能,可以实现缓存 提供了发布订阅功能,可以实现消息系统 提供了 pipeline 功能,客户端可以将一批命令一次性传到 Redis,减少了网络开销
4.简单稳定 源码很少,3.0 版本以后 5 万行左右. 使用单线程模型法,是的 Redis 服务端处理模型变得简单. 不依赖操作系统的中的类库
5.客户端语言多 java,PHP,python,C,C++,Nodejs 等
6.持久化 RDB 和 AOF
7.主从复制
8.高可用和分布式 哨兵 集群
- 应用场景
1.缓存-键过期时间
缓存 session 会话 缓存用户信息,找不到再去 mysql 查,查到然后回写到 redis
2.排行榜-列表&有序集合 热度排名排行榜 发布时间排行榜
3.计数器应用-天然支持计数器 帖子浏览数 视频播放次数 商品浏览数
4.社交网络-集合 踩/赞,粉丝,共同好友/喜好,推送,打标签
5.消息队列系统-发布订阅 配合 elk 实现日志收集
1.1.2 Redis环境部署
- Redis环境部署
#db01 db02 db03 都要操作
[root@db01 ~]# cat >/etc/hosts<<EOF
> 10.4.7.51 db01
> 10.4.7.52 db02
> 10.4.7.53 db03
> EOF
[root@db01 ~]# tail -3 /etc/hosts
10.4.7.51 db01
10.4.7.52 db02
10.4.7.53 db03
创建存放Redis配置的目录
[root@db03 ~]# mkdir -p /data/soft
[root@db03 ~]# mkdir -p /data/redis_cluster/redis_6379
[root@db03 ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
下载Redis:
http://download.redis.io/releases/
[root@db03 /data/soft]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz
--2020-07-08 15:18:51-- http://download.redis.io/releases/redis-3.2.9.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: 1547695 (1.5M) [application/octet-stream]
Saving to: ‘redis-3.2.9.tar.gz’
100%[===========================================================================================>] 1,547,695 7.23KB/s in 6m 50s
2020-07-08 15:25:53 (3.69 KB/s) - ‘redis-3.2.9.tar.gz’ saved [1547695/1547695]
[root@db03 /data/soft]# ll
total 1512
-rw-r--r-- 1 root root 1547695 Jun 27 23:51 redis-3.2.9.tar.gz
解压Redis
[root@db03 /data/soft]# tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
[root@db03 /data/soft]# ll /opt/redis_cluster/
total 0
drwxrwxr-x 6 root root 309 May 17 2017 redis-3.2.9
drwxr-xr-x 5 root root 41 Jul 8 15:17 redis_6379
make安装Redis
[root@db03 /data/soft]# cd /opt/redis_cluster/redis-3.2.9/
[root@db03 /opt/redis_cluster/redis-3.2.9]# make && make install #make install 可以在这里执行,也可以cd ./src 下面去执行 make install
做软连接
[root@db03 /opt/redis_cluster/redis-3.2.9]# ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
[root@db03 /opt/redis_cluster/redis-3.2.9]# ll -ld /opt/redis_cluster/redis
lrwxrwxrwx 1 root root 31 Jul 8 15:59 /opt/redis_cluster/redis -> /opt/redis_cluster/redis-3.2.9/
安装完成后的可执行文件
redis-benchmark
redis-check-aof
redis-check-rdb
redis-cli #客户端连接工具
redis-sentinel #哨兵服务端
redis-server #服务端
- Redis的配置文件
[root@db03 /opt/redis_cluster/redis]# grep "^[a-Z]" /opt/redis_cluster/redis/redis.conf
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
按自己需求配置文件
[root@db03 /opt/redis_cluster/redis]# cp redis.conf{,.bak}
[root@db03 /opt/redis_cluster/redis]# cat > /opt/redis_cluster/redis_6379/conf/redis_6379.conf <<EOF
### 以守护进程模式启动
daemonize yes
### 绑定的主机地址
bind 10.4.7.51 127.0.0.1
### 监听端口
port 6379
### pid 文件和 log 文件的保存地址
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
### 设置数据库的数量,默认数据库为 0
databases 16
### 指定本地持久化文件的文件名,默认是 dump.rdb
dbfilename redis_6379.rdb
### 本地数据库的目录
dir /data/redis_cluster/redis_6379
EOF
- 启动和关闭Redis服务
启动:
[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@db03 ~]# ss -luntp|grep 63
tcp LISTEN 0 511 127.0.0.1:6379 *:* users:(("redis-server",pid=7998,fd=5))
tcp LISTEN 0 511 10.4.7.53:6379 *:* users:(("redis-server",pid=7998,fd=4))
关闭
[root@db03 ~]# redis-cli -h db03 shutdown
[root@db03 ~]# redis-cli -h 10.4.7.53 shutdown
1.1.3 Redis 基本操作命令
Redis 有 5 种数据结构,他们是键值对中的值,对于键来说有一些通用的命令.
- 字符串操作
Redis 并不是简单地 key-value 存储,实际上他是一个数据结构服务器,支持不同类型的值
Redis Strings 这是最简单的 Redis 类型,如果你只用这种类型,Redis 就像一个持久化的 memcache 服务器 (注:memcache 的数据仅保存在内存中,服务器重启后,数据将丢失.)
通常用 SET command 和 GET command 来设置和获取字符串值
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> keys * #查看所有的key
(empty list or set)
10.4.7.53:6379> set name git #设置key
OK
10.4.7.53:6379> get name #检查key
"git"
也可以非交互式的操作
[root@db03 ~]# redis-cli -h 10.4.7.53 set name hub
OK
[root@db03 ~]# redis-cli -h 10.4.7.53 get name
"hub"
[root@db03 ~]# echo "你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自 己。人间值得,未来可期." >test.txt
[root@db03 ~]# cat test.txt
你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.
[root@db03 ~]# redis-cli -h 10.4.7.53 set txt "$(cat test.txt)"
OK
[root@db03 ~]# redis-cli -h 10.4.7.53 get txt
"\xe4\xbd\xa0\xe5\x8a\xaa\xe5\x8a\x9b\xe8\x8e\xb7\xe5\xbe\x97\xe7\x9a\x84\xef\xbc\x8c\xe9\x83\xbd\xe6\x98\xaf\xe8\x87\xaa\xe5\xb7\xb1\xe7\x9a\x84\xef\xbc\x8c\xe4\xb8\x8d\xe5\xae\xb9\xe6\x98\x93\xe5\xbf\x98\xe6\x8e\x89\xe3\x80\x82 \xe6\x98\x9f\xe8\xbe\xb0\xe5\x92\x8c\xe5\xa4\xa7\xe6\xb5\xb7\xe9\x83\xbd\xe9\x9c\x80\xe8\xa6\x81\xe9\x97\xa8\xe7\xa5\xa8\xef\xbc\x8c\xe8\xaf\x97\xe5\x92\x8c\xe8\xbf\x9c\xe6\x96\xb9\xe7\x9a\x84\xe8\xb7\xaf\xe8\xb4\xb9\xe9\x83\xbd\xe5\xbe\x88\xe8\xb4\xb5\xe3\x80\x82\xe6\x9d\xa5\xe4\xba\xba\xe9\x97\xb4\xe4\xb8\x80\xe6\xac\xa1\xef\xbc\x8c\xe5\x8a\xaa\xe5\x8a\x9b\xe6\x88\x90\xe4\xb8\xba\xe6\x9c\x80\xe5\xa5\xbd\xe7\x9a\x84\xe8\x87\xaa\xe5\xb7\xb1\xe3\x80\x82\xe4\xba\xba\xe9\x97\xb4\xe5\x80\xbc\xe5\xbe\x97\xef\xbc\x8c\xe6\x9c\xaa\xe6\x9d\xa5\xe5\x8f\xaf\xe6\x9c\x9f."
[root@db03 ~]# redis-cli get txt >rad.log
[root@db03 ~]# cat rad.log
你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.
查找所有key (生产中不能使用)
[root@db03 ~]# redis-cli -h 10.4.7.53 keys "*"
1) "txt"
2) "read"
3) "name"
查找某一个key
[root@db03 ~]# redis-cli -h 10.4.7.53 keys name
1) "name"
统计可以的数量
[root@db03 ~]# redis-cli -h 10.4.7.53 dbsize
(integer) 3
查看某一个的类型
[root@db03 ~]# redis-cli -h 10.4.7.53 type name
string
INCR(加1)命令将字符串值解析成整型.将其加 1,最后结果保存为新的字符串,类似命令: INCRBY(加 n), DECR(减1),DECRBY(减 n)
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> set num 100
OK
10.4.7.53:6379> get num
"100"
10.4.7.53:6379> type num
string
10.4.7.53:6379> incr num
(integer) 101
10.4.7.53:6379> incrby num 10
(integer) 111
10.4.7.53:6379> get num
"111"
10.4.7.53:6379> get num
"111"
10.4.7.53:6379> decr num
(integer) 110
10.4.7.53:6379> decrby num 10
(integer) 100
MSET 和 MGET 可以一次存储或获取多个 key 对应的值.
10.4.7.53:6379> mset k2 v2 k3 v3 k4 v4
OK
10.4.7.53:6379> mget k1 name k2 k3 k4
1) (nil)
2) "hub"
3) "v2"
4) "v3"
5) "v4"
EXISTS 命令返回 1(存在) 或 0(不存在) 标识给定 key 的值是否存在.
使用 DEL 命令可以删除 key 对应的值,
DEL 命令返回 1(存在且被删除) 或 0(不存在没被删除) 标识是被删除(值存在)或者没被删除(key 对应的值不存在).
查看某一个key存不存在
10.4.7.53:6379> exists k9
(integer) 0
10.4.7.53:6379> exists k2
(integer) 1
删除key
10.4.7.53:6379> del k9
(integer) 0
10.4.7.53:6379> del k2
(integer) 1
可以对 key 设置一个超时时间,当这个时间到达后被删除
查看某个key的过期时间 ttl
10.4.7.53:6379> ttl name
(integer) -1 #- 表示永不过期
给某一个key添加过期时间 expire
10.4.7.53:6379> expire k3 10
(integer) 1
10.4.7.53:6379> ttl k3
(integer) 4
10.4.7.53:6379> ttl k3
(integer) 3
10.4.7.53:6379> ttl k3
(integer) 2
10.4.7.53:6379> ttl k3
(integer) 2
10.4.7.53:6379> ttl k3
(integer) -2 #表示已经过期并已删除key
10.4.7.53:6379> get k3
(nil) #已经不存在key值了,说明k3不存在
PERSIST 命令去除超时时间
10.4.7.53:6379> EXPIRE txt 100
(integer) 1
10.4.7.53:6379> ttl txt
(integer) 94
10.4.7.53:6379> ttl txt
(integer) 92
10.4.7.53:6379> ttl txt
(integer) 91
10.4.7.53:6379> ttl txt
(integer) 89
10.4.7.53:6379> PERSIST txt #取消txt的超时时间
(integer) 1
10.4.7.53:6379> ttl txt
(integer) -1 #-1 txt 永不过期
- 列表操作
LPUSH 命令可向 list 的左边(头部)添加一个新元素
LPOP 命令可向 list 的右边(尾部)删除一个新元素.
RPUSH 命令可向 list 的右边(尾部)添加一个新元素.
RPOP 命令可向 list 的右边(尾部)删除一个新元素.
最后 LRANGE 可以从 list 中取出一定范围的元素
10.4.7.53:6379> RPUSH list1 A
(integer) 1
10.4.7.53:6379> RPUSH list1 B
(integer) 2
10.4.7.53:6379> RPUSH list1 C
(integer) 3
0.4.7.53:6379> LPUSH list1 top1
(integer) 4
10.4.7.53:6379> LPUSH list1 top2
(integer) 5
10.4.7.53:6379> LRANGE list1 0 -1
1) "top2"
2) "top1"
3) "A"
4) "B"
5) "C"
10.4.7.53:6379> LRANGE list1 0 5
1) "top2"
2) "top1"
3) "A"
4) "B"
5) "C"
10.4.7.53:6379> RPOP list1
"C"
10.4.7.53:6379> LRANGE list1 0 -1
1) "top2"
2) "top1"
3) "A"
4) "B"
10.4.7.53:6379> LPOP list1
"top2"
10.4.7.53:6379> LRANGE list1 0 -1
1) "top1"
2) "A"
3) "B"
- 哈希操作
Hash 看起来就像一个’hash’的样子.由键值对组成
HMSET 指令设置 hash 中的多个域
HGET 取回单个域.
HMGET 取回一系列的值
10.4.7.53:6379> HMSET user:100 username zhansan age 27 job it
OK
10.4.7.53:6379> HMGET user:100 username
1) "zhansan"
10.4.7.53:6379> HMGET user:100 username age
1) "zhansan"
2) "27"
10.4.7.53:6379> HMGET user:100 username age job
1) "zhansan"
2) "27"
3) "it"
10.4.7.53:6379> HGETALL user:100
1) "username"
2) "zhansan"
3) "age"
4) "27"
5) "job"
6) "it"
10.4.7.53:6379> HMSET user:100 email 446424543@qq.com
OK
10.4.7.53:6379> HGETALL user:100
1) "username"
2) "zhansan"
3) "age"
4) "27"
5) "job"
6) "it"
7) "email"
8) "446424543@qq.com"
- 集合操作
集合是字符串的无序排列,
SADD 指令把新的元素添加到 set 中
10.4.7.53:6379> SADD set1 1 2 3 5 7
(integer) 5
10.4.7.53:6379> SADD set1 11
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
6) "11"
10.4.7.53:6379> SADD set2 3 6 8 5 7
(integer) 5
10.4.7.53:6379> SMEMBERS set2
1) "3"
2) "5"
3) "6"
4) "7"
5) "8"
Sdiff 计算集合的差异成员
10.4.7.53:6379> SDIFF set1 set2
1) "1"
2) "2"
3) "11"
10.4.7.53:6379> SADD set3 1 5 12 9
(integer) 4
10.4.7.53:6379> SMEMBERS set3
1) "1"
2) "5"
3) "9"
4) "12"
10.4.7.53:6379> SDIFF set1 set2 set3
1) "2"
2) "11"
Sinter 计算集合的交集
10.4.7.53:6379> SINTER set1 set2 set3
1) "5"
10.4.7.53:6379> SINTER set1 set2
1) "3"
2) "5"
3) "7"
10.4.7.53:6379> SINTER set2 set3
1) "5"
10.4.7.53:6379> SINTER set1 set3
1) "1"
2) "5"
Srem 用来删除指定的值
10.4.7.53:6379> SREM set1 1
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "2"
2) "3"
3) "5"
4) "7"
5) "11"
10.4.7.53:6379> SREM set1 11
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "2"
2) "3"
3) "5"
4) "7"
Sunion 计算集合并集
10.4.7.53:6379> SUNION set1 set2 set3
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"
9) "12"
1.1.4 Redis 持久化配置
- Redis 持久化介绍
可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
优点:速度快,适合于用做备份,主从复制也是基于 RDB 持久化功能实现的。
缺点:会有数据丢失
- 配置Redis持久化
rdb持久化参数配置
dbfilename redis_6379.rdb #持久化文件名
dir /data/redis_cluster/redis_6379 #本地数据库的目录
save 900 1 #900 秒(15 分钟)内有 1 个更改
save 300 10 #300 秒(5 分钟)内有 10 个更改
save 60 10000 #60 秒内有 10000 个更改
[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@db03 ~]# ss -luntp|grep 63
tcp LISTEN 0 511 127.0.0.1:6379 *:* users:(("redis-server",pid=1804,fd=5))
tcp LISTEN 0 511 10.4.7.53:6379 *:* users:(("redis-server",pid=1804,fd=4))
10.4.7.53:6379> BGSAVE
Background saving started
测试:
[root@db03 ~]# for i in {1..10000};do redis-cli -h 10.4.7.53 set k_${i} v_${i}; echo "k_${i} is ok";done
OK
k_1 is ok
OK
k_2 is ok
OK
k_3 is ok
OK
....
。
在配置文件里定义数据目录下就会出现数据文件
[root@db03 ~]# ll /data/redis_cluster/redis_6379/
total 148
-rw-r--r-- 1 root root 147877 Jul 9 13:54 redis_6379.rdb
查看总共插入的数据
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> DBSIZE
(integer) 10001
查看信息
10.4.7.53:6379> info
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7310ac1fcaf4a5a2
redis_mode:standalone
os:Linux 3.10.0-1062.18.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:1804
run_id:14be9cdc06d6867fd5ede7b533b0ab86bf5e9438
tcp_port:6379
uptime_in_seconds:785
uptime_in_days:0
hz:10
lru_clock:436233
executable:/root/redis-server
config_file:/opt/redis_cluster/redis_6379/conf/redis_6379.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:1591944
used_memory_human:1.52M
used_memory_rss:7823360
used_memory_rss_human:7.46M
used_memory_peak:1591944
used_memory_peak_human:1.52M
total_system_memory:2076594176
total_system_memory_human:1.93G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.91
mem_allocator:jemalloc-4.0.3
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1594271376
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:11616
total_commands_processed:11087
instantaneous_ops_per_sec:0
total_net_input_bytes:420076
total_net_output_bytes:6157330
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:306
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:1.88
used_cpu_user:1.30
used_cpu_sys_children:0.06
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=10001,expires=0,avg_ttl=0
AOF 持久化配置
记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
优点:可以最大程度保证数据不丢
缺点:日志记录量级比较大
appendfilename "appendonly.aof" #文件名
appendonly yes #是否打开 aof 日志功能
appendfsync always #每 1 个命令,都立即同步到 aof
appendfsync everysec #每秒写 1 次
appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof.
重启redis:
[root@db03 ~]# !redis-server
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@db03 ~]# !ll
ll /data/redis_cluster/redis_6379/
total 1272
-rw-r--r-- 1 root root 757811 Jul 9 14:37 appendonly.aof
-rw-r--r-- 1 root root 317880 Jul 9 14:30 redis_6379.rdb
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> keys *
1) "k_3163"
2) "k_4212"
3) "k_19250"
4) "k_8028"
5) "k_18115"
....
。
#两种持久方式可以同时开启(并存)
总结:
持久化
rdb
优点:恢复速度快,空间小
缺点:可能会丢失
aof
优点:数据安全,不容易丢失
缺点:恢复速度慢,空间大
Redis有个功能可以在线(热更新)某些配置参数(重启失效)
使用CONFIG GET * 可以查看配置参数(包括手动和默认的)
10.4.7.53:6379> CONFIG GET *
1) "dbfilename"
2) "redis_6379.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) "/opt/redis_cluster/redis_6379/logs/redis_6379.log"
11) "pidfile"
12) "/opt/redis_cluster/redis_6379/pid/redis_6379.pid"
13) "slave-announce-ip"
14) ""
15) "maxmemory"
16) "0"
17) "maxmemory-samples"
18) "5"
19) "timeout"
20) "0"
21) "auto-aof-rewrite-percentage"
22) "100"
23) "auto-aof-rewrite-min-size"
24) "67108864"
25) "hash-max-ziplist-entries"
26) "512"
27) "hash-max-ziplist-value"
28) "64"
29) "list-max-ziplist-size"
30) "-2"
31) "list-compress-depth"
32) "0"
33) "set-max-intset-entries"
34) "512"
35) "zset-max-ziplist-entries"
36) "128"
37) "zset-max-ziplist-value"
38) "64"
39) "hll-sparse-max-bytes"
40) "3000"
41) "lua-time-limit"
42) "5000"
43) "slowlog-log-slower-than"
44) "10000"
45) "latency-monitor-threshold"
46) "0"
47) "slowlog-max-len"
48) "128"
49) "port"
50) "6379"
51) "tcp-backlog"
52) "511"
53) "databases"
54) "16"
55) "repl-ping-slave-period"
56) "10"
57) "repl-timeout"
58) "60"
59) "repl-backlog-size"
60) "1048576"
61) "repl-backlog-ttl"
62) "3600"
63) "maxclients"
64) "10000"
65) "watchdog-period"
66) "0"
67) "slave-priority"
68) "100"
69) "slave-announce-port"
70) "0"
71) "min-slaves-to-write"
72) "0"
73) "min-slaves-max-lag"
74) "10"
75) "hz"
76) "10"
77) "cluster-node-timeout"
78) "15000"
79) "cluster-migration-barrier"
80) "1"
81) "cluster-slave-validity-factor"
82) "10"
83) "repl-diskless-sync-delay"
84) "5"
85) "tcp-keepalive"
86) "300"
87) "cluster-require-full-coverage"
88) "yes"
89) "no-appendfsync-on-rewrite"
90) "no"
91) "slave-serve-stale-data"
92) "yes"
93) "slave-read-only"
94) "yes"
95) "stop-writes-on-bgsave-error"
96) "yes"
97) "daemonize"
98) "yes"
99) "rdbcompression"
100) "yes"
101) "rdbchecksum"
102) "yes"
103) "activerehashing"
104) "yes"
105) "protected-mode"
106) "yes"
107) "repl-disable-tcp-nodelay"
108) "no"
109) "repl-diskless-sync"
110) "no"
111) "aof-rewrite-incremental-fsync"
112) "yes"
113) "aof-load-truncated"
114) "yes"
115) "maxmemory-policy"
116) "noeviction"
117) "loglevel"
118) "notice"
119) "supervised"
120) "no"
121) "appendfsync"
122) "no"
123) "syslog-facility"
124) "local0"
125) "appendonly"
126) "yes"
127) "dir"
128) "/data/redis_cluster/redis_6379"
129) "save"
130) ""
131) "client-output-buffer-limit"
132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
133) "unixsocketperm"
134) "0"
135) "slaveof"
136) ""
137) "notify-keyspace-events"
138) ""
139) "bind"
140) "10.4.7.53 127.0.0.1"
10.4.7.53:6379> CONFIG GET save
1) "save"
2) ""
10.4.7.53:6379> CONFIG SET save "60 100 300 10 600 1"
OK
10.4.7.53:6379> CONFIG GET save
1) "save"
2) "60 100 300 10 600 1"
1.1.5 Redis安全认证
- Redis安全认证
redis 默认开启了保护模式,只允许本地回环地址登录并访问数据库。
禁止 protected-mode
protected-mode yes/no (保护模式,是否只允许本地访问)
Bind :指定 IP 进行监听
[root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
bind 10.4.7.53 127.0.0.1
增加 requirepass {password} 认证
[root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
requirepass 123456
第一种验证方法:
[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> keys *
(error) NOAUTH Authentication required. #需要进行身份验证
10.4.7.53:6379> AUTH 123456
OK
10.4.7.53:6379> set name zhangsan
OK
10.4.7.53:6379> get name
"zhangsan"
第二种验证方法:
[root@db03 ~]# redis-cli -h 10.4.7.53 -a 123456
10.4.7.53:6379> hmset user:100 username zhangsan age 27 job it
OK
10.4.7.53:6379> hmget user:100 username
1) "zhangsan"
标签:10.4,Redis,7.53,redis,6379,应用,db03,root 来源: https://www.cnblogs.com/woaiyunwei/p/13275473.html