Redis 常用命令-上

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
目录
相关文章
|
1月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
42 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
10天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
23 0
|
1月前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
1月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
45 3
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
201 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
27天前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
25 0
|
2月前
|
监控 NoSQL Redis
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
99 3
|
2月前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
71 0
|
3月前
|
存储 消息中间件 NoSQL
Redis命令详解以及存储原理
Redis命令详解以及存储原理
|
4月前
|
存储 缓存 NoSQL
Redis 全局通用命令整理
Redis 全局通用命令整理
67 10