redis
端口号:6379
bash
[root@localhost ~]# vim /etc/redis.conf
69 bind 127.0.0.1 #Redis 仅监听本地回环地址 127.0.0.1,这意味着只有本机可以连接
Redis。若需远程访问,应改为 bind 0.0.0.0(但务必配合密码使用)。
88 protected-mode yes #启用保护模式。当 Redis 未设置密码且未明确绑定到特定 IP(或绑定了外网 IP)时,只允许来自 127.0.0.1 和 ::1 的连接。这是防止未授权访问的安全机制。
92 port 6379 #Redis 监听 TCP 端口 6379(默认端口)。
101 tcp-backlog 511 #设置 TCP 连接全队列(completed connection queue)的最大长度为 511。高并发场景下可能需要调大,并同步调整系统参数 /proc/sys/net/core/somaxconn
113 timeout 0 #客户端空闲连接超时时间为 0,表示永不因空闲而断开连接。
130 tcp-keepalive 300 #每 300 秒(5 分钟)向客户端发送一次 TCP keepalive 探测包,用于检测死连接。
136 daemonize no #Redis 不作为守护进程运行,而是以前台方式启动(适合容器化部署或手动调试)。
147 supervised no #不与操作系统进程管理器(如 systemd 或 upstart)集成。
158 pidfile /var/run/redis_6379.pid #指定 Redis 主进程 PID 写入的文件路径。注意:该目录需存在且 Redis 进程有写权限。
166 loglevel notice #日志级别设为 notice,记录重要信息(如启动、关闭、持久化事件),适合生产环境。
171 logfile /var/log/redis/redis.log #日志输出到指定文件
/var/log/redis/redis.log。确保该路径可写。
186 databases 16 #Redis 启动时创建 16 个逻辑数据库(编号 0 到 15),可通过
SELECT <dbid> 切换。
194 always-show-logo yes #在启动redis时是否显示或在日志中记录记录redis的logo
# RDB 快照持久化策略
218 save 900 1 #900 秒内至少有 1 个 key 变更 → 触发 bgsave
219 save 300 10 #300 秒内至少有 10 个 key 变更 → 触发 bgsave
220 save 60 10000 #60 秒内至少有 10000 个 key 变更 → 触发 bgsave
stop-writes-on-bgsave-error yes #如果后台 RDB 保存失败(如磁盘满),Redis 将拒绝写入操作,防止数据丢失未被察觉。
rdbcompression yes #对 RDB 文件中的字符串值启用 LZF 压缩,节省磁盘空间(推荐开启)。
rdbchecksum yes #在 RDB 文件末尾添加 CRC64 校验和,提高文件损坏检测能力(性能损耗约 10%)。
dir /var/lib/redis #指定 Redis 工作目录。RDB 文件、AOF 文件等都将存储在此目录下。必须是目录路径(不能是文件)。
dbfilename dump.rdb #RDB默认文件名
replica-serve-stale-data yes #当从节点(replica)与主节点失联时,仍可继续响应客户端请求(可能返回过期数据)。若设为 no,则除部分管理命令外均返回错误。
replica-read-only yes #从节点默认为只读模式,禁止客户端在其上执行写命令(防止数据不一致)。
repl-diskless-sync no #主节点在全量同步时,先将 RDB 文件写入磁盘,再发送给从节点(而非直接通过 socket 流式传输)。
repl-diskless-sync-delay 5 #当启用 repl-diskless-sync yes 时,主节点等待 5 秒再开始传输,以便更多从节点能加入批量同步。
replica-priority 100 #从节点优先级(供 Redis Sentinel 选主使用)。数值越小优先级越高;设为 0 表示永不参与选主。
requirepass foobared #设置 Redis 访问密码为 foobared,客户端需先执行 AUTHfoobared 才能操作。
maxclients 10000 # 最大客户端连接数
appendonly no # 禁用 AOF 持久化(仅使用 RDB)
appendfilename "appendonly.aof" # AOF 文件名(当前未生效)
appendfsync everysec # 若启用 AOF,每秒 fsync 一次(平衡性能与安全)
no-appendfsync-on-rewrite no # RDB/AOF 重写期间仍执行appendfsync
auto-aof-rewrite-percentage 100 # AOF 文件比上次重写后增长 100%时触发重写
auto-aof-rewrite-min-size 64mb # AOF 文件至少 64MB 才触发自动重写
aof-load-truncated yes # 启动时若 AOF 被截断,尝试加载并继续启动
aof-use-rdb-preamble yes # AOF 重写使用 RDB 前导(混合持久化,加快恢复)
lua-time-limit 5000 # Lua 脚本最大执行时间(毫秒)
slowlog-log-slower-than 10000 # 慢查询阈值:10000 微秒(10 毫秒)
slowlog-max-len 128 # 慢查询日志最多保留 128 条
latency-monitor-threshold 0 # 延迟监控阈值(0 = 关闭)
notify-keyspace-events "" # 键空间通知事件(空 = 禁用)
hash-max-ziplist-entries 512 # Hash 使用 ziplist 编码的最大元素数
hash-max-ziplist-value 64 # Hash 使用 ziplist 编码的单个field/value 最大字节数
list-max-ziplist-size -2 # List 的 quicklist 每个ziplist 节点最大为 8KB(-2)
list-compress-depth 0 # List 的 quicklist 压缩深度(0= 不压缩)
set-max-intset-entries 512 # Set 使用 intset 编码的最大整数元素数
zset-max-ziplist-entries 128 # Sorted Set 使用 ziplist 编码的最大元素数
zset-max-ziplist-value 64 # Sorted Set 使用 ziplist 编码的单个 member/score 最大字节数
hll-sparse-max-bytes 3000 # HyperLogLog 稀疏表示最大字节数(超过转稠密)
stream-node-max-bytes 4096 # Stream 单个节点最大字节数
stream-node-max-entries 100 # Stream 单个节点最大消息条数
activerehashing yes # 启用渐进式 rehash,避免卡顿
client-output-buffer-limit normal 0 0 0 # 普通客户端输出缓冲区无限制
client-output-buffer-limit replica 256mb 64mb 60 # 从节点:硬限 256MB,软限64MB持续 60 秒则断开
client-output-buffer-limit pubsub 32mb 8mb 60 # Pub/Sub 客户端:硬限 32MB,软限 8MB 持续 60 秒则断开
hz 10 # 后台任务每秒执行 10 次(如过期key 清理)
dynamic-hz yes # 动态调整 hz(连接多时自动提高)
aof-rewrite-incremental-fsync yes # AOF 重写时增量 fsync(每 32MB刷一次)
rdb-save-incremental-fsync yes # RDB 保存时增量 fsync(每 32MB刷一次)
bash
[root@xhde ~ 10:06:26]# redis-cli
127.0.0.1:6379> CONFIG SET requirepass 123456
OK
[root@localhost ~ 10:16:00]# redis-cli
127.0.0.1:6379> config set port 8888
OK
127.0.0.1:6379> CONFIG SET requirepass 123456
OK
[root@xhde ~ 10:55:48]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> config get *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "123456"
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
10) ""
11) "logfile"
12) "/var/log/redis/redis.log"
13) "pidfile"
14) "/var/run/redis_6379.pid"
15) "slave-announce-ip"
16) ""
17) "replica-announce-ip"
18) ""
19) "maxmemory"
20) "0"
21) "proto-max-bulk-len"
22) "536870912"
23) "client-query-buffer-limit"
24) "1073741824"
25) "maxmemory-samples"
26) "5"
27) "lfu-log-factor"
28) "10"
29) "lfu-decay-time"
30) "1"
31) "timeout"
32) "0"
33) "active-defrag-threshold-lower"
34) "10"
35) "active-defrag-threshold-upper"
36) "100"
37) "active-defrag-ignore-bytes"
38) "104857600"
39) "active-defrag-cycle-min"
40) "5"
41) "active-defrag-cycle-max"
42) "75"
43) "active-defrag-max-scan-fields"
44) "1000"
45) "auto-aof-rewrite-percentage"
46) "100"
47) "auto-aof-rewrite-min-size"
48) "67108864"
49) "hash-max-ziplist-entries"
50) "512"
51) "hash-max-ziplist-value"
52) "64"
53) "stream-node-max-bytes"
54) "4096"
55) "stream-node-max-entries"
56) "100"
57) "list-max-ziplist-size"
58) "-2"
59) "list-compress-depth"
60) "0"
61) "set-max-intset-entries"
62) "512"
63) "zset-max-ziplist-entries"
64) "128"
65) "zset-max-ziplist-value"
66) "64"
67) "hll-sparse-max-bytes"
68) "3000"
69) "lua-time-limit"
70) "5000"
71) "slowlog-log-slower-than"
72) "10000"
73) "latency-monitor-threshold"
74) "0"
75) "slowlog-max-len"
76) "128"
77) "port"
78) "6379"
79) "cluster-announce-port"
80) "0"
81) "cluster-announce-bus-port"
82) "0"
83) "tcp-backlog"
84) "511"
85) "databases"
86) "16"
87) "repl-ping-slave-period"
88) "10"
89) "repl-ping-replica-period"
90) "10"
91) "repl-timeout"
92) "60"
93) "repl-backlog-size"
94) "1048576"
95) "repl-backlog-ttl"
96) "3600"
97) "maxclients"
98) "10000"
99) "watchdog-period"
100) "0"
101) "slave-priority"
102) "100"
103) "replica-priority"
104) "100"
105) "slave-announce-port"
106) "0"
107) "replica-announce-port"
108) "0"
109) "min-slaves-to-write"
110) "0"
111) "min-replicas-to-write"
112) "0"
113) "min-slaves-max-lag"
114) "10"
115) "min-replicas-max-lag"
116) "10"
117) "hz"
118) "10"
119) "cluster-node-timeout"
120) "15000"
121) "cluster-migration-barrier"
122) "1"
123) "cluster-slave-validity-factor"
124) "10"
125) "cluster-replica-validity-factor"
126) "10"
127) "repl-diskless-sync-delay"
128) "5"
129) "tcp-keepalive"
130) "300"
131) "cluster-require-full-coverage"
132) "yes"
133) "cluster-slave-no-failover"
134) "no"
135) "cluster-replica-no-failover"
136) "no"
137) "no-appendfsync-on-rewrite"
138) "no"
139) "slave-serve-stale-data"
140) "yes"
141) "replica-serve-stale-data"
142) "yes"
143) "slave-read-only"
144) "yes"
145) "replica-read-only"
146) "yes"
147) "slave-ignore-maxmemory"
148) "yes"
149) "replica-ignore-maxmemory"
150) "yes"
151) "stop-writes-on-bgsave-error"
152) "yes"
153) "daemonize"
154) "no"
155) "rdbcompression"
156) "yes"
157) "rdbchecksum"
158) "yes"
159) "activerehashing"
160) "yes"
161) "activedefrag"
162) "no"
163) "protected-mode"
164) "yes"
165) "repl-disable-tcp-nodelay"
166) "no"
167) "repl-diskless-sync"
168) "no"
169) "aof-rewrite-incremental-fsync"
170) "yes"
171) "rdb-save-incremental-fsync"
172) "yes"
173) "aof-load-truncated"
174) "yes"
175) "aof-use-rdb-preamble"
176) "yes"
177) "lazyfree-lazy-eviction"
178) "no"
179) "lazyfree-lazy-expire"
180) "no"
181) "lazyfree-lazy-server-del"
182) "no"
183) "slave-lazy-flush"
184) "no"
185) "replica-lazy-flush"
186) "no"
187) "dynamic-hz"
188) "yes"
189) "maxmemory-policy"
190) "noeviction"
191) "loglevel"
192) "notice"
193) "supervised"
194) "systemd"
195) "appendfsync"
196) "everysec"
197) "syslog-facility"
198) "local0"
199) "appendonly"
200) "no"
201) "dir"
202) "/var/lib/redis"
203) "save"
204) "900 1 300 10 60 10000"
205) "client-output-buffer-limit"
206) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
207) "unixsocketperm"
208) "0"
209) "slaveof"
210) ""
211) "notify-keyspace-events"
212) ""
213) "bind"
214) "127.0.0.1"
127.0.0.1:6379> config get bind
1) "bind"
2) "127.0.0.1"
127.0.0.1:6379> config set bind 0.0.0.0
(error) ERR Unsupported CONFIG parameter: bind
慢查询
bash
127.0.0.1:6379> slowlog get
(empty list or set)
127.0.0.1:6379> slowlog len
(integer) 0
127.0.0.1:6379> exit
[root@xhde ~ 10:57:56]# vim /etc/re
redhat-release redis.conf redis-sentinel.conf resolv.conf
[root@xhde ~ 10:57:56]# vim /etc/redis.conf
[root@xhde ~ 10:59:21]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> slowlog len
(integer) 1
127.0.0.1:6379> slowlog get
1) 1) (integer) 0
2) (integer) 1780973964
3) (integer) 10253
4) 1) "COMMAND"
5) "127.0.0.1:34360"
6) ""
127.0.0.1:6379> slowlog reset
OK
rdb持久化存储
bash
127.0.0.1:6379> debug populate 5000000
OK
(6.49s)
127.0.0.1:6379> save
OK
(4.26s)
[root@xhde ~ 11:48:21]# pstree -p | grep redis-server ; ll -h /var/lib/redis
|-redis-server(873)-+-{redis-server}(898)
| |-{redis-server}(899)
| `-{redis-server}(900)
total 127M
-rw-r--r-- 1 redis redis 127M Jun 9 11:47 dump.rdb
127.0.0.1:6379> debug populate 5000000
OK
(4.07s)
127.0.0.1:6379> get key:0
"value:0"
127.0.0.1:6379> get key:1
"value:1"
127.0.0.1:6379> get key:2
"value:2"
127.0.0.1:6379> get key:499999
"value:499999"
127.0.0.1:6379> get key:5000000
(nil)
127.0.0.1:6379> bgsave
Background saving started
[root@xhde ~ 12:15:29]# pstree -p | grep redis-server ; ll -h /var/lib/redis
|-redis-server(873)-+-{redis-server}(898)
| |-{redis-server}(899)
| `-{redis-server}(900)
total 127M
-rw-r--r-- 1 redis redis 127M Jun 9 12:17 dump.rdb
AOF
bash
[root@xhde ~ 13:37:42]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"
127.0.0.1:6379> config set appendonly yes
OK
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
127.0.0.1:6379> exit
[root@xhde ~ 13:38:28]# vim /etc/redis.conf
[root@xhde ~ 13:39:11]# systemctl restart redis
[root@xhde ~ 13:39:22]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> DBSIZE
(integer) 5000000
客户端连接redis
bash
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info
# Server
redis_version:5.0.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9529b692c0384fb7
redis_mode:standalone
os:Linux 4.18.0-553.6.1.el8.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.4.1
process_id:2085
run_id:6df6c1aebe4298034b60f3b55f6b4ca417fb48ff
tcp_port:6379
uptime_in_seconds:1880
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:2600546
executable:/usr/bin/redis-server
config_file:/etc/redis.conf
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
# Memory
used_memory:459962648
used_memory_human:438.65M
used_memory_rss:480321536
used_memory_rss_human:458.07M
used_memory_peak:459981888
used_memory_peak_human:438.67M
used_memory_peak_perc:100.00%
used_memory_overhead:267949590
used_memory_startup:791000
used_memory_dataset:192013058
used_memory_dataset_perc:41.82%
allocator_allocated:459977192
allocator_active:460128256
allocator_resident:475160576
total_system_memory:3810131968
total_system_memory_human:3.55G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.00
allocator_frag_bytes:151064
allocator_rss_ratio:1.03
allocator_rss_bytes:15032320
rss_overhead_ratio:1.01
rss_overhead_bytes:5160960
mem_fragmentation_ratio:1.04
mem_fragmentation_bytes:20400888
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1780983562
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:1
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
aof_last_cow_size:0
aof_current_size:132777881
aof_base_size:132777881
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
# Stats
total_connections_received:1
total_commands_processed:4
instantaneous_ops_per_sec:0
total_net_input_bytes:87
total_net_output_bytes:11532
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
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:0
master_replid:af9aa00d0440866eb9ad4c8013964277131f2b65
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
# CPU
used_cpu_sys:0.757869
used_cpu_user:5.896551
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=5000000,expires=0,avg_ttl=0
要安装的程序
bash
[root@xhde ~ 14:11:52]# ll /usr/bin/redis-*
-rwxr-xr-x 1 root root 656280 Oct 20 2021 /usr/bin/redis-benchmark
lrwxrwxrwx 1 root root 12 Oct 20 2021 /usr/bin/redis-check-aof -> redis-server
lrwxrwxrwx 1 root root 12 Oct 20 2021 /usr/bin/redis-check-rdb -> redis-server
-rwxr-xr-x 1 root root 827608 Oct 20 2021 /usr/bin/redis-cli
lrwxrwxrwx 1 root root 12 Oct 20 2021 /usr/bin/redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 1800864 Oct 20 2021 /usr/bin/redis-server
[root@xhde ~ 14:12:06]#
客户端程序redis-cli
bash
#默认本机无密码连接
redis-cli
# 远程客户端连接,注意:Redis没有用户的概念
redis-cli -h <Redis服务器IP> -p <PORT> -a <PASSWORD> --no-auth-warning
redis命令
bash
#info,select
127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:0
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
OK
#keys
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
#bgsave
127.0.0.1:6379> bgsave
Background saving started
#dbsize
27.0.0.1:6379> dbsize
(integer) 5000000
#flushdb
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> DBSIZE
(integer) 5000000
127.0.0.1:6379> FLUSHDB
OK
(2.59s)
127.0.0.1:6379> DBSIZE
(integer) 0
127.0.0.1:6379> SELECT 1
#清空db0所有数据
#db1数据不影响
OK
127.0.0.1:6379[1]> DBSIZE
(integer) 4
#flush all
127.0.0.1:6379> FLUSHALL
OK
# 生产建议修改配置使用rename-command禁用此命令
[root@localhost ~]# vim /etc/redis.conf
523 rename-command FLUSHALL ""
设置appendonly no,不区分命令大小写
699 appendonly no
#flushdb和flushall 配置和AOF功能冲突,需要
# 测试
[root@localhost ~]# systemctl restart redis
[root@localhost ~]# redis-cli
127.0.0.1:6379> FLUSHALL
(error) ERR unknown command `FLUSHALL`, with args beginning with:
127.0.0.1:6379> FLUSHDB
OK
数据类型【字符串】
bash
127.0.0.1:6379> set ket value1
OK
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> type key1
string
127.0.0.1:6379> set title ceo ex 3
OK
127.0.0.1:6379> set name wang
OK
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> get title
(nil)
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> set NAME li
OK
127.0.0.1:6379> get NAME
"li"
127.0.0.1:6379> set title coo
OK
127.0.0.1:6379> setnx title coo
(integer) 0
127.0.0.1:6379> get title
"coo"
127.0.0.1:6379> setnx title ceo
(integer) 0
127.0.0.1:6379> get title
"coo"
127.0.0.1:6379> setnx title ceo xx
(error) ERR wrong number of arguments for 'setnx' command
127.0.0.1:6379> set title ceo xx
OK
127.0.0.1:6379> get title
"ceo"
127.0.0.1:6379> set age 20 xx
(nil)
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> get name age
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> del key1 key2
(integer) 0
127.0.0.1:6379> mset key1 value1 key2 value2
OK
127.0.0.1:6379> mget key1 key2
1) "value1"
2) "value2"
127.0.0.1:6379> keys n*
1) "name"
127.0.0.1:6379> keys *
1) "key2"
2) "name"
3) "NAME"
4) "ket"
5) "title"
6) "key1"
127.0.0.1:6379> append key1 " append new value "
(integer) 24
127.0.0.1:6379> get key1
"value1 append new value "
127.0.0.1:6379> set name wang
OK
127.0.0.1:6379> getset name my
"wang"
127.0.0.1:6379> get name
"my"
127.0.0.1:6379> set name wang
OK
127.0.0.1:6379> strlen name
(integer) 4
127.0.0.1:6379> append name " teng "
(integer) 10
127.0.0.1:6379> get name
"wang teng "
127.0.0.1:6379> strlen name
(integer) 10
127.0.0.1:6379> set name wang ex 10
OK
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name age
(integer) 1
127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379> ttl key
(integer) -2
127.0.0.1:6379> ttl key1
(integer) -1
127.0.0.1:6379> set name wang EX 100
OK
127.0.0.1:6379> ttl name
(integer) 95
127.0.0.1:6379> ttl name
(integer) 90
127.0.0.1:6379> set name li
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> set name wang EX 200
OK
127.0.0.1:6379> ttl name
(integer) 197
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> expire name 1000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 996
127.0.0.1:6379> persist name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> get num
"11"
127.0.0.1:6379> incr num
(integer) 12
127.0.0.1:6379> get num
"12"
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> get num
"9"
127.0.0.1:6379> set mykey 10
OK
127.0.0.1:6379> incrby mykey 5
(integer) 15
127.0.0.1:6379> get mykey
"15"
127.0.0.1:6379> incrby mykey -10
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379> get mykey
"5"
127.0.0.1:6379> incrby nokey1 5
(integer) 5
127.0.0.1:6379> get nokey1
"5"
127.0.0.1:6379> set mykey 10
OK
127.0.0.1:6379> decrby mykey 8
(integer) 2
127.0.0.1:6379> get mykey
"2"
127.0.0.1:6379> decrby mykey -20
(integer) 22
127.0.0.1:6379> get mykey
"22"
127.0.0.1:6379> decrby nokey2 3
(integer) -3
127.0.0.1:6379> get nokey2
"-3"
127.0.0.1:6379> get name
"wang"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
列表list
bash
127.0.0.1:6379> lpush phone xiaomi apple huawei
(integer) 3
127.0.0.1:6379> type phone
list
127.0.0.1:6379> rpush id 18 19 20
(integer) 3
127.0.0.1:6379> tyoe id
(error) ERR unknown command `tyoe`, with args beginning with: `id`,
127.0.0.1:6379> type id
list
127.0.0.1:6379> lpush list1 tom
(integer) 1
127.0.0.1:6379> rpush list1 jack
(integer) 2
127.0.0.1:6379> llen list1
(integer) 2
127.0.0.1:6379> lpush list2 a b c d
(integer) 4
127.0.0.1:6379> lindex list2 0
"d"
127.0.0.1:6379> lindex list2 3
"a"
127.0.0.1:6379> lrange list2 1 2
1) "c"
2) "b"
127.0.0.1:6379> lrange list2 0 3
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange list2 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> rpush list3 a b c d e
(integer) 5
127.0.0.1:6379> lindex list3 0
"a"
127.0.0.1:6379> lrange list3 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> rpush list4 a b c d e f
(integer) 6
127.0.0.1:6379> lrange list4 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lset list4 2 cloud
OK
127.0.0.1:6379> lrange list4 0 -1
1) "a"
2) "b"
3) "cloud"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> LPUSH list5 a b c d
(integer) 4
127.0.0.1:6379> lrange list5 0 3
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lpop list5
"d"
127.0.0.1:6379> lrange list5 0 3
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> RPOP list5
"a"
127.0.0.1:6379> lrange list5 0 3
1) "c"
2) "b"
127.0.0.1:6379> rpush list6 a b c d e
(integer) 5
127.0.0.1:6379> lrange list6 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> ltrim list6 2 3
OK
127.0.0.1:6379> lrange list6 0 -1
1) "c"
2) "d"
127.0.0.1:6379> del list1
(integer) 1
127.0.0.1:6379> exists list1
(integer) 0
集合set
bash
127.0.0.1:6379> sadd set1 v1
(integer) 1
127.0.0.1:6379> sadd set2 v2 v4
(integer) 2
127.0.0.1:6379> type set1
set
127.0.0.1:6379> type set2
set
127.0.0.1:6379> sadd set1 v1 v2 v3 v4
(integer) 3
127.0.0.1:6379> smembers set1
1) "v1"
2) "v3"
3) "v4"
4) "v2"
127.0.0.1:6379> smembers set2
1) "v4"
2) "v2"
127.0.0.1:6379> sadd name1 a b c
(integer) 3
127.0.0.1:6379> smembers name1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem name1 b
(integer) 1
127.0.0.1:6379> smembers name1
1) "c"
2) "a"
127.0.0.1:6379> sinter set1 set2
1) "v4"
2) "v2"
127.0.0.1:6379> sunion se1 set2
1) "v2"
2) "v4"
127.0.0.1:6379> sdiff set1 set2
1) "v1"
2) "v3"
有序集合sorted set
bash
127.0.0.1:6379> ZADD zset1 1 v1
(integer) 1
127.0.0.1:6379> ZADD zset1 2 v2
(integer) 1
127.0.0.1:6379> ZADD zset1 2 v3
(integer) 1
127.0.0.1:6379> ZADD zset1 3 v4
(integer) 1
127.0.0.1:6379> type zset1
zset
127.0.0.1:6379> zadd zset2 1 v1 2 v2 3 v3 4 v4 5 v5
(integer) 5
127.0.0.1:6379> zadd course 90 linux 99 go 60 python 50 cloud
(integer) 4
127.0.0.1:6379> zrange course 0 -1
1) "cloud"
2) "python"
3) "linux"
4) "go"
127.0.0.1:6379> zrevrange course 0 -1
1) "go"
2) "linux"
3) "python"
4) "cloud"
127.0.0.1:6379> zrange course 0 -1 withscores
1) "cloud"
2) "50"
3) "python"
4) "60"
5) "linux"
6) "90"
7) "go"
8) "99"
127.0.0.1:6379> zrevrange course 0 -1 withscores
1) "go"
2) "99"
3) "linux"
4) "90"
5) "python"
6) "60"
7) "cloud"
8) "50"
127.0.0.1:6379> zcard course
(integer) 4
127.0.0.1:6379> zcard zset1
(integer) 4
127.0.0.1:6379> zcard zset2
(integer) 5
127.0.0.1:6379> zrange course 0 2
1) "cloud"
2) "python"
3) "linux"
127.0.0.1:6379> zrange course 0 10
1) "cloud"
2) "python"
3) "linux"
4) "go"
127.0.0.1:6379> zrange zset1 1 3
1) "v2"
2) "v3"
3) "v4"
127.0.0.1:6379> zrange zset1 0 2
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrange zset1 2 2
1) "v3"
127.0.0.1:6379> zrank course go
(integer) 3
127.0.0.1:6379> zrank course python
(integer) 1
127.0.0.1:6379> zscore course cloud
"50"
127.0.0.1:6379> zrange course 0 -1
1) "cloud"
2) "python"
3) "linux"
4) "go"
127.0.0.1:6379> zrem course python go
(integer) 2
127.0.0.1:6379> zrange course 0 -1
1) "cloud"
2) "linux"
哈希hash
bash
127.0.0.1:6379> hset 1 name a age 10
(integer) 2
127.0.0.1:6379> type 1
hash
127.0.0.1:6379> hgetall 1
1) "name"
2) "a"
3) "age"
4) "10"
127.0.0.1:6379> hset 1 gender male
(integer) 1
127.0.0.1:6379> hgetall 1
1) "name"
2) "a"
3) "age"
4) "10"
5) "gender"
6) "male"
127.0.0.1:6379> hget 1 name
"a"
127.0.0.1:6379> hget 1 age
"10"
127.0.0.1:6379> hmget 1 name age
1) "a"
2) "10"
127.0.0.1:6379> hdel 1 age
(integer) 1
127.0.0.1:6379> hgetall 1
1) "name"
2) "a"
3) "gender"
4) "male"
127.0.0.1:6379> hmset 1 name b age 15 city nj
OK
127.0.0.1:6379> hgetall 1
1) "name"
2) "b"
3) "gender"
4) "male"
5) "age"
6) "15"
7) "city"
8) "nj"
127.0.0.1:6379> hmget 1 name age
1) "b"
2) "15"
127.0.0.1:6379> hkeys 1
1) "name"
2) "gender"
3) "age"
4) "city"
127.0.0.1:6379> hvals 1
1) "b"
2) "male"
3) "15"
4) "nj"
127.0.0.1:6379> hgetall 1
1) "name"
2) "b"
3) "gender"
4) "male"
5) "age"
6) "15"
7) "city"
8) "nj"
127.0.0.1:6379> del 1
(integer) 1
127.0.0.1:6379> exists 1
(integer) 0
消息队列
list实现消息队列
bash
127.0.0.1:6379> lpush xcm xd
(integer) 1
127.0.0.1:6379> lpush xcm xe
(integer) 2
127.0.0.1:6379> lpush xcm bb
(integer) 3
127.0.0.1:6379> lpush xcm gtq
(integer) 4
127.0.0.1:6379> lpush xcm tt
(integer) 5
127.0.0.1:6379> lrange xcm 0 -1
1) "tt"
2) "gtq"
3) "bb"
4) "xe"
5) "xd"
127.0.0.1:6379> rpop xcm
"xd"
127.0.0.1:6379> rpop xcm
"xe"
127.0.0.1:6379> rpop xcm
"bb"
127.0.0.1:6379> rpop xcm
"gtq"
127.0.0.1:6379> rpop xcm
"tt"
127.0.0.1:6379> rpop xcm
(nil)
127.0.0.1:6379> lrange xcm 0 -1
(empty list or set)
即时消费问题
bash
127.0.0.1:6379> lpush xcm xd xe bb gtq tt
(integer) 5
127.0.0.1:6379> lrange xcm 0 -1
1) "tt"
2) "gtq"
3) "bb"
4) "xe"
5) "xd"
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "xd"
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "xe"
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "bb"
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "gtq"
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "tt"
127.0.0.1:6379> brpop xcm 10
(nil)
(10.06s)
127.0.0.1:6379> brpop xcm 10
1) "xcm"
2) "lbt"
发布者、订阅者模式
bash
发布者:
127.0.0.1:6379> publish xcm jj
(integer) 2
127.0.0.1:6379> publish xyy xyy
(integer) 1
订阅者
127.0.0.1:6379> subscribe xcm
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xcm"
3) (integer) 1
1) "message"
2) "xcm"
3) "jj"
127.0.0.1:6379> subscribe xcm xyy
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xcm"
3) (integer) 1
1) "subscribe"
2) "xyy"
3) (integer) 2
1) "message"
2) "xcm"
3) "jj"
1) "message"
2) "xyy"
3) "xyy"
# 订阅所有频道
127.0.0.1:6379> PSUBSCRIBE *
# 订阅匹配的频道
127.0.0.1:6379> PSUBSCRIBE xyy*