Top

NSD NOSQL DAY03

  1. 案例1:配置redis主从复制
  2. 案例2 :使用RDB文件恢复数据
  3. 案例3 :使用AOF文件恢复数据
  4. 案例4:Redis数据库常用操作

1 案例1:配置redis主从复制

1.1 问题

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置redis主从复制

1) 配置主从,4.51为主,4.52为从

若主机做过redis集群,需要在配置文件里面把开启集群,存储集群信息的配置文件都关闭,新主机则不用,这里用之前的redis集群做主从,需要还原redis服务器,4.51和4.52都需要还原(以4.51为例)

  1. [root@redisA ~]# redis-cli -c -h 192.168.4.51 -p 6351 shutdown    
  2. //先关闭redis集群
  3. [root@redisA ~]# vim /etc/redis/6379.conf
  4. bind 192.168.4.51
  5. port 6379
  6. # cluster-enabled yes
  7. # cluster-config-file nodes-6351.conf
  8.  
  9. [root@redisA ~]# /etc/init.d/redis_6379 start
  10. Starting Redis server...
  11.  
  12. [root@redisA ~]# ss -antlp | grep 6379
  13. LISTEN 0 511 192.168.4.51:6379 *:* users:(("redis-server",pid=22274,fd=6))
  14.  
  15. [root@redisA ~]# redis-cli -h 192.168.4.51
  16. 192.168.4.51:6379> info replication        //查看主从配置信息
  17. # Replication
  18. role:master            //默认是master 服务器
  19. connected_slaves:0
  20. master_replid:eaa14478158a71c41f947eaea036658c2087e8f2
  21. master_replid2:0000000000000000000000000000000000000000
  22. master_repl_offset:0
  23. second_repl_offset:-1
  24. repl_backlog_active:0
  25. repl_backlog_size:1048576
  26. repl_backlog_first_byte_offset:0
  27. repl_backlog_histlen:0
  28. 192.168.4.51:6379>

2)配置从库192.168.4.52/24

  1. 192.168.4.52:6379> SLAVEOF 192.168.4.51 6379            //把52配置为51的从库
  2. OK

从库查看

  1. 192.168.4.52:6379> INFO replication
  2. # Replication
  3. role:slave
  4. master_host:192.168.4.51        //主库为4.51
  5. master_port:6379
  6. master_link_status:up
  7. master_last_io_seconds_ago:3
  8. master_sync_in_progress:0

3)主库查看

  1. [root@redisA ~]# redis-cli -h 192.168.4.51
  2. 192.168.4.51:6379> info replication
  3. # Replication
  4. role:master
  5. connected_slaves:1
  6. slave0:ip=192.168.4.52,port=6379,state=online,offset=14,lag=1    //从库为4.52
  7. master_replid:db7932eb0ea4302bddbebd395efa174fb079319f
  8. master_replid2:0000000000000000000000000000000000000000
  9. master_repl_offset:14
  10. second_repl_offset:-1
  11. repl_backlog_active:1
  12. repl_backlog_size:1048576
  13. repl_backlog_first_byte_offset:1
  14. repl_backlog_histlen:14
  15. 192.168.4.51:6379>

4)反客为主,主库宕机后,手动将从库设置为主库

  1. [root@redisA ~]# redis-cli -h 192.168.4.51 shutdown            //关闭主库
  2.  
  3. 192.168.4.52:6379> SLAVEOF no one     //手动设为主库
  4. OK
  5. 192.168.4.52:6379> INFO replication
  6. # Replication
  7. role:master
  8. connected_slaves:0
  9. master_replid:00e35c62d2b673ec48d3c8c7d9c7ea3366eac33a
  10. master_replid2:db7932eb0ea4302bddbebd395efa174fb079319f
  11. master_repl_offset:420
  12. second_repl_offset:421
  13. repl_backlog_active:1
  14. repl_backlog_size:1048576
  15. repl_backlog_first_byte_offset:1
  16. repl_backlog_histlen:420
  17. 192.168.4.52:6379>

5)哨兵模式

主库宕机后,从库自动升级为主库

在slave主机编辑sentinel.conf文件

在slave主机运行哨兵程序

  1. [root@redisB ~]# redis-cli -h 192.168.4.52
  2. 192.168.4.52:6379> SLAVEOF 192.168.4.51 6379
  3. OK
  4. 192.168.4.52:6379> INFO replication
  5. # Replication
  6. role:slave
  7. master_host:192.168.4.51
  8. master_port:6379
  9. ...
  10.  
  11. [root@redisA ~]# /etc/init.d/redis_6379 start
  12. Starting Redis server...
  13.  
  14. [root@redisA ~]# redis-cli -h 192.168.4.51
  15. 192.168.4.51:6379> info replication
  16. # Replication
  17. role:master
  18. connected_slaves:1
  19. slave0:ip=192.168.4.52,port=6379,state=online,offset=451,lag=1
  20. master_replid:4dfa0877c740507ac7844f8dd996445d368d6d0f
  21. master_replid2:0000000000000000000000000000000000000000
  22. ...
  23.  
  24.  
  25. [root@redisB ~]# vim /etc/sentinel.conf
  26. sentinel monitor redisA 192.168.4.51 6379 1
  27. 关键字 关键字 主机名自定义 ip      端口 票数
  28. sentinel auth-pass redis51 密码 //连接主库密码,若主库有密码加上这一行
  29. [root@redisB ~]# redis-sentinel /etc/sentinel.conf    //执行,之后把主库宕机
  30. ...
  31. 25371:X 28 Sep 11:16:54.993 # +sdown master redis51 192.168.4.51 6379
  32. 25371:X 28 Sep 11:16:54.993 # +odown master redis51 192.168.4.51 6379 #quorum 1/1
  33. 25371:X 28 Sep 11:16:54.993 # +new-epoch 3
  34. 25371:X 28 Sep 11:16:54.993 # +try-failover master redis51 192.168.4.51 6379
  35. 25371:X 28 Sep 11:16:54.994 # +vote-for-leader be035801d4d48eb63d8420a72796f52fc5cec047 3
  36. ...
  37. 25371:X 28 Sep 11:16:55.287 * +slave slave 192.168.4.51:6379 192.168.4.51 6379 @ redis51 192.168.4.52 6379
  38. 25371:X 28 Sep 11:17:25.316 # +sdown slave 192.168.4.51:6379 192.168.4.51 6379 @ redis51 192.168.4.52 6379

6)配置带验证的主从复制

关闭4.51和4.52,启动之后用info replication查看,各自为主

主库设置密码,在51上面操作

  1. [root@redisA ~]# redis-cli -h 192.168.4.51 shutdown
  2.  
  3. [root@redisA ~]# vim /etc/redis/6379.conf
  4. requirepass 123456
  5.  
  6. [root@redisA ~]# /etc/init.d/redis_6379 start
  7. Starting Redis server...
  8.  
  9. [root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
  10. 192.168.4.51:6379> ping
  11. PONG
  12. 192.168.4.51:6379>

7)配置从库主机

  1. [root@redisB ~]# redis-cli -h 192.168.4.52 shutdown
  2.  
  3. [root@redisB ~]# vim /etc/redis/6352.conf
  4. slaveof 192.168.4.51 6379
  5. masterauth 123456
  6.  
  7. [root@redisB ~]# /etc/init.d/redis_6352 start
  8. Starting Redis server...

52上面查看 52从主库变为从库

  1. [root@redisB ~]# redis-cli -h 192.168.4.52 -a 123456
  2. 192.168.4.52:6379> info replication
  3. # Replication
  4. role:slave
  5. master_host:192.168.4.51
  6. master_port:6379
  7. master_link_status:up

51上面查看 51的从库为52

  1. [root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
  2. 192.168.4.51:6379> info replication
  3. # Replication
  4. role:master
  5. connected_slaves:1
  6. slave0:ip=192.168.4.52,port=6379,state=online,offset=98,lag=0

2 案例2 :使用RDB文件恢复数据

2.1 问题

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:使用RDB文件恢复数据

RDB介绍:

Redis数据库文件,全称Reids DataBase

数据持久化方式之一

在指定时间间隔内,将内存中的数据集快照写入硬盘

术语叫Snapshot快照

恢复时,将快照文件直接读到内存里

相关配置参数

文件名

dbfilename “dump.rdb” 文件名

save “” 禁用RDB

数据从内存保存到硬盘的频率

save 900 1 900秒内且有1次修改

save 300 10 300秒内且有10次修改

save 60 10000 60秒内且有10000修改

  1. [root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456 shutdown
  2. [root@redisA ~]# vim /etc/redis/6379.conf
  3. dbfilename dump.rdb
  4. # save ""        //启用RDB,去掉#号为禁用RDB
  5. save 120 10        //120秒内且有1次修改(满足三个条件中的任意一个都会保存)
  6. save 300 10
  7. save 60 10000
  8.  
  9. [root@redisA ~]# /etc/init.d/redis_6379 start
  10. Starting Redis server...
  11. [root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
  12. 192.168.4.51:6379>
  13. [root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
  14. 192.168.4.51:6379>
  15. 192.168.4.51:6379> set v1 k1
  16. OK
  17. 192.168.4.51:6379> set v2 k1
  18. OK
  19. 192.168.4.51:6379> set v3 k1
  20. OK
  21. 192.168.4.51:6379> set v4 k1
  22. OK
  23. 192.168.4.51:6379> set v45 k1
  24. OK
  25. 192.168.4.51:6379> set v46 k1
  26. OK
  27. 192.168.4.51:6379> set v7 k1
  28. OK
  29. 192.168.4.51:6379> set v8 k1
  30. OK
  31. 192.168.4.51:6379> set v9 k1
  32. OK
  33. 192.168.4.51:6379> set v10 k1
  34. OK
  35. 192.168.4.51:6379> keys *
  36. 1) "v2"
  37. 2) "v9"
  38. 3) "v10"
  39. 4) "v45"
  40. 5) "v4"
  41. 6) "v1"
  42. 7) "v46"
  43. 8) "v8"
  44. 9) "v7"
  45. 10) "v3"
  46. 192.168.4.51:6379>exit

备份数据

  1. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown        //停止服务
  2. [root@redisA ~]# cd /var/lib/redis/6379/
  3. [root@redisA 6379]# ls
  4. dump.rdb nodes-6351.conf
  5. [root@redisA 6379]# cp dump.rdb dump.rdb.bak    //备份dump.rdb,之后删除

删除数据

  1. [root@redisA 6379]# rm -rf dump.rdb
  2. [root@redisA 6379]# /etc/init.d/redis_6379 start
  3. Starting Redis server...
  4. [root@redisA 6379]# ls
  5. dump.rdb dump.rdb.bak nodes-6351.conf
  6. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  7. 192.168.4.51:6379> keys *        //已经没有数据
  8. (empty list or set)
  9. 192.168.4.51:6379>

恢复数据

  1. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
  2. [root@redisA 6379]# mv dump.rdb.bak dump.rdb
  3. mv: overwrite ‘dump.rdb’? y
  4. [root@redisA 6379]# /etc/init.d/redis_6379 start
  5. Starting Redis server...
  6. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  7. 192.168.4.51:6379> keys *
  8. 1) "v7"
  9. 2) "v46"
  10. 3) "v45"
  11. 4) "v8"
  12. 5) "v4"
  13. 6) "v2"
  14. 7) "v1"
  15. 8) "v3"
  16. 9) "v9"
  17. 10) "v10"
  18. 192.168.4.51:6379>

RDB优点:

高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作

比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合

RDB的缺点:

意外宕机时,最后一次持久化的数据会丢失

3 案例3 :使用AOF文件恢复数据

3.1 问题

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:使用AOF文件恢复数据

1)AOF介绍

只做追加操作的文件,Append Only File

记录redis服务所有写操作

不断的将新的写操作,追加到文件的末尾

使用cat命令可以查看文件内容

2)参数配置

文件名

appendfilename "appendonly.aof" 指定文件名

appendonly yes 启用aof ,默认no

AOF文件记录写操作的方式

appendfsync always 有新写操作立即记录

appendfsync everysec 每秒记录一次

appendfsync no 从不记录

  1. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
  2. [root@redisA 6379]# rm -rf dump.rdb
  3. [root@redisA 6379]# vim /etc/redis/6379.conf
  4. appendonly yes            //启用aof,默认no
  5. appendfilename "appendonly.aof"    //文件名
  6. appendfsync everysec            //每秒记录一次
  7. [root@redisA 6379]# vim /etc/redis/6379.conf
  8. [root@redisA 6379]# /etc/init.d/redis_6379 start
  9. Starting Redis server...
  10. [root@redisA 6379]# ls            //会出现appendonly.aof文件
  11. appendonly.aof dump.rdb nodes-6351.conf
  12.  
  13. [root@redisA 6379]# cat appendonly.aof        //无内容
  14. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  15. 192.168.4.51:6379> set v1 a1
  16. OK
  17. 192.168.4.51:6379> set v2 a2
  18. OK
  19. 192.168.4.51:6379> set v3 a3
  20. OK
  21. 192.168.4.51:6379> set v4 a4
  22. OK
  23. 192.168.4.51:6379> set v5 a5
  24. OK
  25. 192.168.4.51:6379> set v6 a6
  26. OK
  27. 192.168.4.51:6379> set v7 a7
  28. OK
  29. 192.168.4.51:6379> set v8 a7
  30. OK
  31. 192.168.4.51:6379> set v9 a9
  32. OK
  33. 192.168.4.51:6379> set v10 a10
  34. OK
  35. 192.168.4.51:6379> keys *
  36. 1) "v2"
  37. 2) "v5"
  38. 3) "v10"
  39. 4) "v9"
  40. 5) "v6"
  41. 6) "v8"
  42. 7) "v3"
  43. 8) "v7"
  44. 9) "v1"
  45. 10) "v4"
  46. 192.168.4.51:6379> exit
  47. [root@redisA 6379]# cat appendonly.aof            //有数据

3)使用AOF恢复数据

备份数据

  1. [root@redisA 6379]# cp appendonly.aof appendonly.aof.bak
  2. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown

删除数据

  1. [root@redisA 6379]# rm -rf appendonly.aof
  2. [root@redisA 6379]# /etc/init.d/redis_6379 start
  3. Starting Redis server...
  4. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  5. 192.168.4.51:6379> keys *
  6. (empty list or set)
  7. 192.168.4.51:6379> exit

恢复数据

  1. [root@redisA 6379]# mv appendonly.aof.bak appendonly.aof
  2. mv: overwrite ‘appendonly.aof’? y
  3. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
  4. [root@redisA 6379]# /etc/init.d/redis_6379 start
  5. Starting Redis server...
  6. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  7. 192.168.4.51:6379> keys *
  8. 1) "v9"
  9. 2) "v5"
  10. 3) "v8"
  11. 4) "v2"
  12. 5) "v1"
  13. 6) "v4"
  14. 7) "v10"
  15. 8) "v6"
  16. 9) "v7"
  17. 10) "v3"
  18. 192.168.4.51:6379>

修复AOF文件,把文件恢复到最后一次的正确操作

  1. [root@redisA 6379]# vim appendonly.aof
  2. *2        //可以把这一行删除
  3. $6
  4. SELECT
  5. $1
  6. 0
  7. *3
  8. $3
  9. set
  10. $2
  11. v1
  12. $2
  13. a1
  14. *3
  15. $3
  16. ...
  17. [root@redisA 6379]# redis-check-aof --fix appendonly.aof        //恢复文件
  18. 0x 0: Expected prefix '*', got: '$'
  19. AOF analyzed: size=311, ok_up_to=0, diff=311
  20. This will shrink the AOF from 311 bytes, with 311 bytes, to 0 bytes
  21. Continue? [y/N]: y
  22. Successfully truncated AOF

RDB优点:

可以灵活的设置同步持久化appendfsync always或异步持久化appendfsync verysec

宕机时,仅可能丢失1秒的数据

RDB的缺点:

AOF文件的体积通常会大于RDB文件的体积

执行fsync策略时的速度可能会比RDB慢

4 案例4:Redis数据库常用操作

4.1 问题

4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:redis数据类型

1)String字符串

set key value [ex seconds] [px milliseconds] [nx|xx]

设置key及值,过期时间可以使用秒或毫秒为单位

setrange key offset value

从偏移量开始复写key的特定位的值

  1. [root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
  2. 192.168.4.51:6379> set first "hello world"
  3. OK
  4. 192.168.4.51:6379> setrange first 6 "Redis"     //改写为hello Redis
  5. (integer) 11
  6. 192.168.4.51:6379> get first
  7. "hello Redis"

strlen key,统计字串长度

  1. 192.168.4.51:6379> strlen first
  2. (integer) 11

append key value 存在则追加,不存在则创建key及value,返回key长度

  1. 192.168.4.51:6379> append myname jacob
  2. (integer) 5

setbit key offset value 对key所存储字串,设置或清除特定偏移量上的位(bit),value值可以为1或0,offset为0~2^32之间,key不存在,则创建新key

  1. 192.168.4.51:6379> setbit bit 0 1         //设置bit第0位为1
  2. (integer) 0
  3. 192.168.4.51:6379> setbit bit 1 0         //设置bit第1位为0
  4. (integer) 0

bitcount key 统计字串中被设置为1的比特位数量

  1. 192.168.4.51:6379> setbit bits 0 1        //0001
  2. (integer) 0
  3. 192.168.4.51:6379> setbit bits 3 1        //1001
  4. (integer) 0
  5. 192.168.4.51:6379> bitcount bits            //结果为2
  6. (integer) 2

记录网站用户上线频率,如用户A上线了多少天等类似的数据,如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可,这样即使网站运行10年,每个用户仅占用10*365比特位即456字节

  1. 192.168.4.51:6379> setbit peter 100 1        //网站上线100天用户登录了一次
  2. (integer) 0
  3. 192.168.4.51:6379> setbit peter 105 1        //网站上线105天用户登录了一次
  4. (integer) 0
  5. 192.168.4.51:6379> bitcount peter
  6. (integer) 2

decr key 将key中的值减1,key不存在则先初始化为0,再减1

  1. 192.168.4.51:6379> set z 10
  2. OK
  3. 192.168.4.51:6379> decr z
  4. (integer) 9
  5. 192.168.4.51:6379> decr z
  6. (integer) 8
  7.  
  8.  
  9. 192.168.4.51:6379> decr bb
  10. (integer) -1
  11. 192.168.4.51:6379> decr bb
  12. (integer) -2

decrby key decrement 将key中的值,减去decrement

  1. 192.168.4.51:6379> set count 100
  2. OK
  3. 192.168.4.51:6379> DECRBY cc 20    //定义每次减少20(步长)
  4. (integer) -20
  5. 192.168.4.51:6379> DECRBY cc 20
  6. (integer) -40

get key 返回key存储的字符串值,若key不存在则返回nil,若key的值不是字串,则返回错误,get只能处理字串

  1. 192.168.4.51:6379> get a
  2. (nil)

getrange key start end 返回字串值中的子字串,截取范围为start和end,负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符

  1. 192.168.4.51:6379> set x 123456789
  2. OK
  3. 192.168.4.51:6379> getrange x -5 -1
  4. "56789"
  5. 192.168.4.51:6379> getrange x 0 4
  6. "12345"

incr key 将key的值加1,如果key不存在,则初始为0后再加1,主要应用为计数器

  1. 192.168.4.51:6379> set page 20
  2. OK
  3. 192.168.4.51:6379> incr page
  4. (integer) 21

incrby key increment 将key的值增加increment

  1. 192.168.4.51:6379> set x 10
  2. OK
  3. 192.168.4.51:6379> incr x
  4. (integer) 11
  5. 192.168.4.51:6379> incr x
  6. (integer) 12

incrbyfloat key increment 为key中所储存的值加上浮点数增量 increment

  1. 192.168.4.51:6379> set num 16.1
  2. OK
  3. 192.168.4.51:6379> incrbyfloat num 1.1
  4. "17.2"

mset key value [key value …] 设置多个key及值,空格分隔,具有原子性

  1. 192.168.4.51:6379> mset j 9 k 29
  2. OK

mget key [key…] 获取一个或多个key的值,空格分隔,具有原子性

  1. 192.168.4.51:6379> mget j k
  2. 1) "9"
  3. 2) "29"

2)list列表

Redis的list是一个字符队列,先进后出,一个key可以有多个值

lpush key value [value…] 将一个或多个值value插入到列表key的表头,Key不存在,则创建key

  1. 192.168.4.51:6379> lpush list a b c        //list值依次为c b a
  2. (integer) 3

lrange key start stop 从开始位置读取key的值到stop结束

  1. 192.168.4.51:6379> lrange list 0 2        //从0位开始,读到2位为止
  2. 1) "c"
  3. 2) "b"
  4. 3) "a"
  5. 192.168.4.51:6379> lrange list 0 -1    //从开始读到结束为止
  6. 1) "c"
  7. 2) "b"
  8. 3) "a"
  9. 192.168.4.51:6379> lrange list 0 -2        //从开始读到倒数第2位值
  10. 1) "c"
  11. 2) "b"

lpop key 移除并返回列表头元素数据,key不存在则返回nil

  1. 192.168.4.51:6379> lpop list        //删除表头元素,可以多次执行
  2. "c"
  3. 192.168.4.51:6379> LPOP list
  4. "b"

llen key 返回列表key的长度

  1. 192.168.4.51:6379> llen list
  2. (integer) 1

lindex key index 返回列表中第index个值

  1. 192.168.4.51:6379> lindex list 1
  2. "c"

lset key index value 将key中index位置的值修改为value

  1. 192.168.4.51:6379> lpush list a b c d
  2. (integer) 5
  3. 192.168.4.51:6379> lset list 3 test        //将list中第3个值修改为test
  4. OK

rpush key value [value…] 将value插入到key的末尾

  1. 192.168.4.51:6379> rpush list3 a b c    //list3值为a b c
  2. (integer) 3
  3. 192.168.4.51:6379> rpush list3 d    //末尾插入d
  4. (integer) 4

rpop key 删除并返回key末尾的值

  1. 192.168.4.51:6379> RPOP list3
  2. "d"

3)hash表

hset key field value 将hash表中field值设置为value

  1. 192.168.4.51:6379> hset site google 'www.g.cn'
  2. (integer) 1
  3. 192.168.4.51:6379> hset site baidu 'www.baidu.com'
  4. (integer) 1

hget key filed 获取hash表中field的值

  1. 192.168.4.51:6379> hget site google
  2. "www.g.cn"

hmset key field value [field value…] 同时给hash表中的多个field赋值

  1. 192.168.4.51:6379> hmset site google www.g.cn baidu www.baidu.com
  2. OK

hmget key field [field…] 返回hash表中多个field的值

  1. 192.168.4.51:6379> hmget site google baidu
  2. 1) "www.g.cn"
  3. 2) "www.baidu.com"

hkeys key 返回hash表中所有field名称

  1. 192.168.4.51:6379> hmset site google www.g.cn baidu www.baidu.com
  2. OK
  3. 192.168.4.51:6379> hkeys site
  4. 1) "google"
  5. 2) "baidu"

hgetall key 返回hash表中所有key名和对应的值列表

  1. 192.168.4.51:6379> hgetall site
  2. 1) "google"
  3. 2) "www.g.cn"
  4. 3) "baidu"
  5. 4) "www.baidu.com"

hvals key 返回hash表中所有key的值

  1. 192.168.4.51:6379> hvals site
  2. 1) "www.g.cn"
  3. 2) "www.baidu.com"

hdel key field [field…] 删除hash表中多个field的值,不存在则忽略

  1. 192.168.4.51:6379> hdel site google baidu
  2. (integer) 2