Redis教程(二)Key的通用操作与常用服务管理命令

TangLu Redis 2019-10-15 15720 0

Redis有5种数据结构类型,分别是字符串(strings)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)。其中strings类型是最简单的数据类型,它可以包含任何数据,如jpg图片或者序列化的对象,但是值不能超过512M。要管理这些数据的话需要使用redis客户端工具redis-cli连接到redis服务后执行对应的命令。


一、redis-cli客户端常用选项

在Linux中要管理Redis服务或者数据的话需要通过redis-cli这个客户端工具来进行操作,如果是Java或者Python等语言的话还有专门的客户端工具,在Redis官网可以看到推荐。

redis-cli选项众多,下面说几个常用的:

-a:如果redis配置了密码的话需要使用这个选项来指定密码

-h:指定redis的地址,域名或者ip都可以

-p:指定redis的端口

-n:指定需要连接的数据库编号

-r:指定命令执行的次数

redis-cli -r 3 ping #ping 三次


-i:和r结合使用,指定多次命令执行的时间间隔,单位为秒


--bigkeys:找到内存占用比较大的键值,需要注意对于 String 类型来说,会输出最大 bigkey 的字节长度,对于集合类型来说,会输出最大 bigkey 的元素个数。该名会通过扫描数据库来进行查找,在执行过程中会对 Redis性能产生影响,建议从节点上执行该命令或者使用 -i 参数控制扫描间隔,避免长时间扫描降低 Redis 实例的性能。这个方法只能返回每种类型中最大的那个 bigkey,无法得到大小排在前 N 位的 bigkey,对于集合类型来说只统计集合元素个数的多少,而不是实际占用的内存量

./redis-cli  --bigkeys

-------- summary -------
Sampled 32 keys in the keyspace!
Total key length in bytes is 184 (avg len 5.75)

//统计每种数据类型中元素个数最多的bigkey
Biggest   list found 'product1' has 8 items
Biggest   hash found 'dtemp' has 5 fields
Biggest string found 'page2' has 28 bytes
Biggest stream found 'mqstream' has 4 entries
Biggest    set found 'userid' has 5 members
Biggest   zset found 'device:temperature' has 6 members

//统计每种数据类型的总键值个数,占所有键值个数的比例,以及平均大小
4 lists with 15 items (12.50% of keys, avg size 3.75)
5 hashs with 14 fields (15.62% of keys, avg size 2.80)
10 strings with 68 bytes (31.25% of keys, avg size 6.80)
1 streams with 4 entries (03.12% of keys, avg size 4.00)
7 sets with 19 members (21.88% of keys, avg size 2.71)
5 zsets with 17 members (15.62% of keys, avg size 3.40)



--latency:检查redis服务的网络延迟,可以用来查看Redis延迟峰值,分析性能问题


--latency-histrory:以15秒为间隔显示多条网络延迟信息

redis-cli --latency-histrory


--stat:实时获取redis重要统计信息,虽然统计信息没有info全面,但是能实时看到增量变化


--raw:将返回的数据格式化再输出,常用于显示包含中文的Key,当key包含了中文时,登陆redis时增加该选项就可以正确获取到中文,否则是二进制格式


二、redis服务端常用命令

在介绍各个命令之前需要知道的是Redis提供了一个命令别名的功能,可以把默认命名修改或禁用以增强安全性,如果发现命令无法执行,就要检查配置文件中是否有这个配置了,比如:

rename-command FLUSHALL ""


1、Redis服务信息命令

ping:查看服务是否正常连接,如果正常的话会返回一个pong的输出


select:选择指定编号的数据库。Redis提供了0-15号数据库,默认是0,但是不推荐使用多个数据库来区分业务,真有这种需求的话考虑多实例更好

select 1  #Redis默认有16个数据库,编号是0-15,这里选择了1号数据库


info:获取服务相关统计信息,如Redis版本的查看,占用的内存等,和keys命令一样可以通配符


memory usage:4.0开始支持,用于查看制定key占用的内存,单位是字节

memory usage test_key


client list:查看已连接的客户端


config get:根据匹配条件查看服务配置信息,支持通配符

config get timeout  #查看配置文件中timeout相关信息
config get requ*  #查看requ开头的配置项


config set:在线修改redis配置,结合config rewrite可以实现不重启服务而修改配置

config set maxmemory 1gb  #在线修改内存大小,支持各种单位


config rewrite:将在线配置写入到配置文件,不用重启服务


#在线修改redis最大内存
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "24000000000"
127.0.0.1:6379> config set maxmemory 26000000000
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "26000000000"
127.0.0.1:6379> config rewrite
OK


flushdb:删除当前选中库中的所有key,数据量大的时候有阻塞风险


flushall:删除所有库中的所有key,数据量大的时候有阻塞风险


dbsize:返回当前库中key的数量


save:将redis数据持久化存储到rdb文件,由于是前台运行会产生阻塞


bgsave:开启子现成进行数据持久化,不会阻塞


shutdown:优雅关闭redis

redis-cli -a 123456 -h 127.0.0.1 shutdown


2、Redis 数据操作命令

set:设置某个key的值,区分大小写,可以非交互写入

set site www.linuxe.cn #设置一个key,名为“site”,值为www.linuxe.cn
redis-cli -h 192.168.100.10 -p 6379 set name tom  #非交互式设置或读取key


get:获取某个key的值

get site  #获取之前设置的“site”的值


rename:修改key的名字

rename oldkey newkey


renamenx:修改key的名字,只不过新的key名必须是不存在的才可以,避免覆盖已有的key


append:给key尾部追加值

append site good  #在site这个key的value后面加上good字段


type:查看某个key的类型,比如是string还是hash


mset / mget:批量设置和获取多个key,命令复杂度属于O(N),如果获取的元素个数不是特别多的话可以使用,通过批量操作节约网络带宽。该操作属于原子性操作,在批量设置key时如果有一个key失败,整个操作都会失败

mset name1 tom name2 jerry name3 john


exists:查看某个key是否存在,存在返回1,否则为0


randomkey:返回一个随机的key


keys:列出符合匹配条件的key,可以使用通配符进行遍历,如keys *,但是需要注意如果key数量特别多的话这样会导致服务阻塞,建议在从节点执行或者使用scan命令


setnx: 给某个不存在的key设置一个值,如果该key已存在则返回0,避免覆盖之前设置好的key(nx=not exist)


setex:给某个key设置一个值,并且指定一个有效期

setex name 10 tanglu  #10秒过期


getset:获取一个key的旧值,并赋予新值

getset name tom  #如name旧值为jerry,那么会打印出来,并且重新设置为tom


ttl:查看某个key的有效期,-1代表不过期,-2代表键不存在,其他数字代表距离过期秒数

ttl name


expire:设置某个已存在的key的有效期,单位为秒。还可以使用expireat来指定过期时间戳,通过一些转换工具可以方便的获取到时间戳

expire name 100


persist:把某个key设置为永久有效

persist name


del:删除一个或多个key,返回的值是成功删除的个数,如果删除的键不存在返回0。删除Bigkey会有阻塞风险

del key1 key2


unlink:4.0以上版本所支持新的删除Key方法,不会有阻塞问题


move:移动key到指定数据库

move age 2  #移动age这个key到2号数据库


incr:对某个整数型的key进行自增,应用场景比如微博转发增加次数

decr:对某个key进行自减

incrby:对某个key进行指定数值的增加

decrby:对某个key进行指定数值的减少

redisstring.jpg

评论