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"
-----你努力獲得的,都是自己的,不容易忘掉。
星辰和大海都需要門票,詩和遠方的路費都很貴。來人間一次,努力成為最好的自己。人間值得,未來可期。
浙公網安備 33010602011771號