Redis 常用命令-上

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: redis 键操作keys key-pattern:返回匹配的 key 列表,比如:keys foo* 表示查找 foo 开头的 keys。keys my*查看所有键keys*其中,pattern 可以用 “?” 来代替一位字符,用“*”来匹配零个、一个或多个字符,还可以用正则表达式的方式来匹配(模式匹配)。keys *命令虽然可以返回所有的键,但是在项目里键的数量一般会很多,全部返回没有意义,所以一般不怎么使用。返回当前数据库的 key 的总数。

redis 键操作


keys key-pattern:返回匹配的 key 列表,比如:keys foo* 表示查找 foo 开头的 keys。


keys my*


查看所有键


keys*


其中,pattern 可以用 “?” 来代替一位字符,用“*”来匹配零个、一个或多个字符,还可以用正则表达式的方式来匹配(模式匹配)。keys *命令虽然可以返回所有的键,但是在项目里键的数量一般会很多,全部返回没有意义,所以一般不怎么使用。

返回当前数据库的 key 的总数。


dbsize


判断一个 key 是否存在,存在返回 1,否则返回 0。


exists key


删除某个 key,或是一系列 key,比如:del key1 key2 key3 key4。成功返回 1,失败返回 0(key 值不存在)。


del key [key2] [...]


在实际项目里,虽然能用 del 同时删除多个键,但是为了防止误删,尽量每次仅删除一个键,或者在确认的情况下每次删除少量键。


返回某个 key 元素的数据类型(none:不存在,string:字符,list:列表,set:元组,zset:有序集合,hash:哈希),key 不存在返回空。


type key


随机获得一个已经存在的 key,如果当前数据库为空,则返回空字符串。


randomkey


更改 key 的名字,新键如果存在将被覆盖。


rename oldname newname


更改 key 的名字,新键如果存在则更新失败。


renamenx oldname newname


设置过期时间 TTL 和 Ptll


Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以计。


redis 127.0.0.1:6379> Expire KEY_NAME


如果在还没有过期的时候,再次对值进行改变,那么新值会覆盖老值, 老值会自动失效.


设置过期时间



  • ttl 命令以秒为单位返回 key 的剩余过期时间。


  • Pttl 命令以毫秒为单位返回 key 的剩余过期时间。


当 key 不存在时,返回 -2 。


当 key 存在但没有设置剩余生存时间时,返回 -1 。


否则,以毫秒为单位,返回 key 的剩余生存时间。


注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。


键过期


expire key seconds



返回键的剩余过期时间


ttl key


通过 persist 命令,能删除键的生存时间,之后该键永不过期。该命令的格式如下:


persist key


查找 key


scan 命令里包含一个记录迭代位置的游标(cursor),每次执行scan 命令时,除了会返回查找到的键以外,还会返回一个记录迭代位置的游标数值,如果返回的迭代位置数值是 0,则表示已经返回全部的键。scan 命令的基本用法如下:


scan cursor [MATCH pattern] [COUNT count]


scan 命令里包含一个记录迭代位置的游标(cursor),每次执行scan 命令时,除了会返回查找到的键以外,还会返回一个记录迭代位置的游标数值,如果返回的迭代位置数值是 0,则表示已经返回全部的键。


第 1 行的scan命令表示从 0 号游标开始查找键,其中表示返回键数量的 COUNT 值默认是 10,也就是说该命令将从头开始返回 10 个键的名称。


127.0.0.1:6379> scan 0
1) "0"
2) 1) "tel"
   2) "nu"
   3) "a"
   4) "ddd"
   5) "likai"
   6) "mylist"
   7) "b"
   8) "kai"


由于当前键的数量大于 5 个,因此第 2 行表示下次迭代的游标数值是 3,返回了 5 个键的名称。由此大家可以看到“部分查找”的效果。


127.0.0.1:6379> scan 0 match * count 5
1) "3"
2) 1) "tel"
   2) "nu"
   3) "a"
   4) "ddd"
   5) "likai"
127.0.0.1:6379> scan 3 match * count 5
1) "0"
2) 1) "mylist"
   2) "b"
   3) "kai"


和 keys 命令相比,scan 命令是以非阻塞的方式查找并返回键,也就是说,在大多数场景下 scan 能替代 keys 命令。如果待查找的键个数比较少,那么用 keys 命令尚可,否则建议使用 scan 命令。


清除 key


flushdb:清空当前数据库中的所有键。


flushall:清空所有数据库中的所有键。


键的数据结构类型


查看键的数据结构类型


type key


查询内部编码


object encoding key


设置相关命令



清除界面。


clear


CONFIG GET and CONFIG SET


config get:用来读取运行 Redis 服务器的配置参数。


config set:用于更改运行 Redis 服务器的配置参数。


auth:认证密码。


重置报告


config resetstat:重置数据统计报告,通常返回值为“OK”。


查询配置信息


info [section]:查询 Redis 相关信息。


info 命令可以查询 Redis 几乎所有的信息,其命令选项有如下:


server: Redis server 的常规信息


clients: Client 的连接选项


memory: 存储占用相关信息


persistence: RDB and AOF 相关信息


stats: 常规统计


replication: Master/Slave 请求信息


cpu: CPU 占用信息统计


cluster: Redis 集群信息


keyspace: 数据库信息统计


all: 返回所有信息


default: 返回常规设置信息


综合案例




set mykey hello
exists mykey
del mykey
exists mykey


HyperLogLog



HyperLogLog 其实是 Redis 里用来统计基数的一个对象。比如用来统计网站访问总人数。


用 pfadd 命令能向其中添加键值对,并可在此基础上用 pfcount 命令统计某个键的基数值。


127.0.0.1:6379> pfadd peter math computer piano
(integer) 1
127.0.0.1:6379> pfcount peter
(integer) 3
127.0.0.1:6379> pfadd marry math math piano
(integer) 1
127.0.0.1:6379> pfcount marry
(integer) 2
127.0.0.1:6379>


用 pfcount 可以查看一个或多个键的基数。如果对应的key不存在,则返回 0。


127.0.0.1:6379> pfcount  peter marry existkey
(integer) 3


这里需要说明的是,该命令返回的是对应基数的近似值,也就是说,当基数量很大时统计结果未必是精确值。


通过 pfmerge 命令,能把多个 HyperLogLog 合并成一个,该命令的格式如下:


pfmerge destkey sourcekey [sourcekey ...]


lua 脚本相关命令



lua 是一种比较轻量的脚本语言,可以嵌入应用程序中,能以较小的代价定制功能。在 Redis 里,也可以通过使用 lua 脚本来实现特定的效果。


lua 脚本是一个和 Redis 独立的技术,不仅能用在 Redis 里,还能用在其他场景中。

把 lua 脚本装载到缓存里


127.0.0.1:6379> script load "return 1 + 2"
"e412f6a7f0b07176d9824bb91205d9d54e88fdc0"


从第 2 行的输出里能看到该脚本的 sha1 校验和。随后可以通过script exists 命令来判断指定校验和的脚本是否存在于缓存中,该命令的用法如下:


script exists e412f6a7f0b07176d9824bb91205d9d54e88fdc0


可以通过 evalsha 命令来执行缓存中的脚本,该命令的格式如下:


evalsha sha1 numkeys key [key ...] arg [arg ...]


案例


127.0.0.1:6379> evalsha e412f6a7f0b07176d9824bb91205d9d54e88fdc0 0
(integer) 3


可以通过 script flush 命令来清空缓存中所有的 lua 脚本


script flush


用 eval 命令执行 lua 脚本


eval script numkeys key [key ...] arg [arg ...]


在第1行里,通过 eval 命令运行了双引号里的 lua 脚本,eval 命令的参数 1 表示有 1 个参数,name 和 'Peter' 分别对应于脚本里的KEYS[1] 和 ARGV[1]。由于本脚本是通过 return 语句返回 KEYS[1] 和 ARGV[1] 的,因此在第 2 行和第 3 行里能看到打印对应的值。


eval "return {KEYS[1], ARGV[1]}" 1 name peter


当某个脚本出现死循环或者出于其他原因需要终止当前正在运行的脚本时,可以使用 script kill 命令,如果当前并没有脚本在运行,那么执行该命令会看到如下第2行所示的输出结果。


127.0.0.1:6379> script kill
(error) NOTBUSY No scripts in execution right now.


排序命令



在 sort 命令里,可以通过 asc 参数进行升序排列操作,通过desc参数进行降序排列操作。


如果要对字符串类型的元素排序,需要加上 alpha 参数。


此外还可以通过 by 参数设置排序的模式。


用 limit 参数返回部分排序结果。


对于给定的数据对象,如果经常需要用相对固定的模式进行排序,就可以用 store 参数来缓存结果,这样每次做相同的排序动作时就不需要耗费资源从头做起了,可以从缓存中直接得到结果。


参考



基于 Docker 的 Redis 入门与实战-金华 胡书敏编著-微信读书


https://weread.qq.com/web/reader/f2932520725d0bbff2948bckc81322c012c81e728d9d180



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
|
13天前
|
监控 NoSQL Redis
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
25 3
|
3天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
11 0
|
2月前
|
存储 消息中间件 NoSQL
Redis命令详解以及存储原理
Redis命令详解以及存储原理
|
3月前
|
存储 缓存 NoSQL
Redis 全局通用命令整理
Redis 全局通用命令整理
60 10
|
2月前
|
SQL 缓存 NoSQL
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
|
2月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
|
2月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
|
3月前
|
存储 JSON NoSQL
Redis常见命令大全
【7月更文挑战第30天】
21 3
|
3月前
|
NoSQL Redis 索引
Redis 中ZSET数据类型命令使用及对应场景总结
Redis 中ZSET数据类型命令使用及对应场景总结
49 2
下一篇
无影云桌面