Redis如下几个指令经常适用,记录如下:
select db_index
一个Redis实例默认有16个数据库,从0-15,每个数据库是独立存在的,如果没指定,默认操作0号数据库。在第一篇说到,Redis是单线程的,如果在一个Redis实例同时使用多个数据库,彼此之间的操作效率上还是有一定影响的,而且,如果管理不当,很容易弄错数据库编号,操作不必要损失,因此,推荐默认多个Redis实例(对应多个端口),每个实例使用0号数据库,以实例来区分不同项目和测试目的。
keys <匹配表达式>
keys命令用于列出当前Redis实例的所有key,加*列出所有key,其他则匹配对应key:
如下则是显示以h开头的key:
注意:keys命令会遍历所有键,因此,如果有几百万条数据甚至更多的话,这样会容易搞崩服务器,因此慎用这条命令,推荐使用2.8版本以后新增的命令: scan。
scan
现在Redis实例有20个key:
换成用scan来遍历:
第一次遍历游标cursor是0,遍历后返回下一次遍历开始的游标和这次遍历返回的键,然后第二次从游标5开始,当返回游标值返回0时遍历介绍,以这种方式在遍历时降低了Redis的阻塞,但是,如果在多次遍历是有新建加入或旧键值变化,可能无法检测到,因此,使用时根据实际需要权衡使用。对应Redis的不同数据类型,分别有hscan, sscan, zscan,用法类似。
dbsize
查看当前实例有多少个key,因为redis有一个全局变量保存该值,因此,数据量再多执行这条命令也没事。
exists key
查看对应key是否存在
del [key1, key2, key3 …]
删除指定key
expire key seconds
设定指定的key多少秒后过期,到期后该key会被自动删除,注意,如果设置的时间为负数,key会立即被删除,等同于del命令。
expireat key timestamp
设定key在指定时间错过期
persist key
清除key的过期时间
ttl key
获取指定key的剩余过期秒数,返回大于0整数对应剩余的描述,返回-1则键永久有效,-2则为键不存在。
type key
返回指定key的数据类型,如string, hash, list等。
incr/decr key
指定key的值自增或自减1,注意,若key不存在,则默认新建key然后自增,且key对应值需要整数,否则,报错。
incrby/decrby key number
指定key以指定number自增或自减
rename key newkey
对key重新命名为newkey,注意,如果newkey原本有值,其值会被覆盖。因此,建议使用替代的命令renamex来进行重命名操作,它会在newkey不存在的时候才进行覆盖。
randomkey
随机返回一个键
move key db
将key移动到另一个db上
- dump key
- restore key ttl value
第1步在源Redis对key的值采用RDB格式进行序列化
第2步会在目标Redis对第1步序列化的key值进行反序列化,ttl标准过期时间,0表示不过期。
注意:这两个过程不是原子性操作的,相当于两个连接。如要进行数据迁移,建议使用migrate,它具有原子性操作,只需要在源Redis执行此命令即可。
migrate
如要在迁移后删除源Redis该键,不加copy参数,否则添加, replace是目标Redis存在同样key是否覆盖。
flushdb
清除当前数据库数据,键比较多时会阻塞,谨慎操作。
flushall
清除所有数据库,键比较多时会阻塞,谨慎操作。