当前位置: 首页 > news >正文

Redis 学习笔记 | 常用命令

Redis 学习笔记

一、Redis 简介

  1. 定义 :Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储数据库,通常被称为数据结构服务器。
  2. 数据存储位置 :它将所有数据都存储在内存中,这使得 Redis 具有极高的读写性能,每秒可以处理数十万次操作。同时,Redis 支持数据的持久化功能,可以将内存中的数据保存到磁盘中,防止数据丢失。
  3. 适用场景 :适用于需要高性能数据读写、数据缓存、消息队列、排行榜等场景,例如在 Web 应用中缓存用户会话信息、存储热点数据以减轻数据库负担等。

二、Redis 的作用

  1. 缓存 :利用其快速读写特性,将经常访问的数据缓存在内存中,减少对后端数据库的访问次数,提高应用性能。例如,缓存电商网站的商品信息、新闻资讯网站的新闻内容等。
  2. 消息队列 :可以实现不同系统组件之间的异步通信。比如,在订单处理系统中,当用户下单后,将订单信息放入 Redis 消息队列,然后由后端的订单处理服务异步消费队列中的订单进行处理,提高系统的响应速度和吞吐量。
  3. 计数器 :由于 Redis 支持原生的原子操作,可以方便地实现计数功能,如统计网站的访问量、用户点赞数等,不用担心并发情况下数据不一致的问题。
  4. 分布式锁 :在分布式系统环境中,Redis 可以作为分布式锁的实现工具,确保多个节点在访问共享资源时的互斥性,避免资源竞争和数据混乱。
  5. 排行榜 :利用 Redis 的有序集合数据结构,可以轻松地实现排行榜功能,根据分数对元素进行排序,例如游戏中的玩家排行榜、电商网站的热销商品排行榜等。

三、常用 Redis 命令及作用

1. 连接与服务器相关命令

  • ping :用于测试与 Redis 服务器的连接是否正常。如果连接正常,服务器会返回 “PONG”。
  • echo message :将消息原样返回,用于测试 Redis 是否正常工作。
  • select <dbindex> :Redis 默认有 16 个数据库(编号从 0 到 15),通过该命令可以选择指定编号的数据库进行操作。
  • databases :查看 Redis 中数据库的数量。
  • flushdb :清空当前数据库中的所有数据。
  • flushall :清空 Redis 实例中所有数据库的数据。

2. 键(Key)相关命令

  • del key :删除指定的键。如果键不存在,则不执行任何操作。
  • exists key :检查指定的键是否存在。如果存在,返回 1;如果不存在,返回 0。
  • expire key seconds :为指定的键设置过期时间,单位为秒。当键过期后,Redis 会自动删除该键。
  • ttl key :查看指定键的剩余生存时间(以秒为单位)。如果键没有设置过期时间,则返回 -1;如果键不存在,则返回 -2。
  • keys pattern :根据给定的模式查找所有匹配的键。例如,keys user* 可以查找所有以 “user” 开头的键。
  • type key :获取指定键所存储的值的类型,如字符串、列表、集合等。

3. 字符串(String)类型相关命令

  • set key value :将指定键的值设置为给定的字符串。如果键已经存在,会覆盖原有的值。
  • get key :获取指定键的值。如果键不存在,则返回空。
  • getset key value :将指定键的值设置为新值,并返回键的旧值。如果键不存在,则相当于执行 set key value 操作,并返回空。
  • append key value :将指定的值追加到键原来值的末尾。如果键不存在,则相当于执行 set key value 操作。
  • incr key :将键对应的值(必须为数字)递增 1。如果键不存在,则先初始化为 0,再递增 1。
  • incrby key increment :将键对应的值递增指定的整数 increment。类似地,decr keydecrby key decrement 用于将值递减。
  • mget key1 [key2 ...] :获取多个键的值,并以列表形式返回。
  • mset key1 value1 [key2 value2 ...] :同时设置多个键值对。

4. 列表(List)类型相关命令

  • rpush key value1 [value2 ...] :将一个或多个值插入到列表键的尾部。如果键不存在,则先创建一个空列表,再执行插入操作。
  • lpush key value1 [value2 ...] :将一个或多个值插入到列表键的头部。
  • lpop key :移除并返回列表键的第一个元素。
  • rpop key :移除并返回列表键的最后一个元素。
  • lrange key start stop :获取列表键中指定区间内的元素。例如,lrange key 0 -1 可以获取整个列表的所有元素。
  • lrem key count value :根据参数 count 的值,从列表中移除指定数量的等于 value 的元素。count 为 0,移除所有等于 value 的元素;count > 0,从头部开始移除;count < 0,从尾部开始移除。
  • llen key :获取列表键的长度,即列表中元素的数量。

5. 哈希(Hash)类型相关命令

  • hset key field value :将哈希表 key 中的字段 field 的值设置为 value。如果字段已经存在,则覆盖原有的值。
  • hget key field :获取哈希表 key 中字段 field 的值。
  • hmget key field1 [field2 ...] :获取哈希表 key 中多个字段的值,返回一个列表。
  • hmset key field1 value1 [field2 value2 ...] :同时设置哈希表 key 中多个字段的值。
  • hkeys key :获取哈希表 key 中所有的字段名。
  • hvals key :获取哈希表 key 中所有的字段值。
  • hgetall key :获取哈希表 key 中所有的字段及其对应的值,以列表形式返回,交替出现字段名和字段值。
  • hdel key field1 [field2 ...] :删除哈希表 key 中的一个或多个字段。

6. 集合(Set)类型相关命令

  • sadd key member1 [member2 ...] :将一个或多个成员添加到集合 key 中。集合中的成员是唯一的,所以如果成员已经存在,则不会重复添加。
  • smembers key :获取集合 key 中的所有成员。
  • srem key member1 [member2 ...] :移除集合 key 中的一个或多个成员。
  • spop key :移除并返回集合 key 中的一个随机成员。
  • scard key :获取集合 key 中成员的数量。
  • sismember key member :判断 member 是否是集合 key 的成员。如果是,返回 1;否则返回 0。
  • sinter key1 [key2 ...] :计算多个集合的交集,并返回结果。
  • sunion key1 [key2 ...] :计算多个集合的并集,并返回结果。
  • sdiff key1 [key2 ...] :计算多个集合的差集(即只存在于第一个集合中的成员),并返回结果。

7. 有序集合(Sorted Set)类型相关命令

  • zadd key score1 member1 [score2 member2 ...] :将一个或多个成员及其对应的分数添加到有序集合 key 中。如果成员已经存在,则更新其分数。
  • zrange key start stop [withscores] :获取有序集合 key 中指定区间内的成员,默认按分数从小到大排序。如果使用 withscores 参数,还会返回每个成员的分数。
  • zrevrange key start stop [withscores] :获取有序集合 key 中指定区间内的成员,但按分数从大到小排序。
  • zrem key member1 [member2 ...] :移除有序集合 key 中的一个或多个成员。
  • zcard key :获取有序集合 key 中成员的数量。
  • zscore key member :获取有序集合 key 中成员 member 的分数。
  • zincrby key increment member :将有序集合 key 中成员 member 的分数增加指定的 increment 值。
  • zrangebyscore key min max [withscores] :获取有序集合 key 中分数在 min 和 max 之间的所有成员,可选择是否返回成员的分数。

相关文章:

  • 香港科技大学广州|生命科学与生物医学工程学域博士项目招生宣讲会—南京大学专场!!!(暨全额奖学金政策)
  • 测试—概念篇
  • BT131-ASEMI无人机专用功率器件BT131
  • 如何快速在idea中希望Spark程序
  • JAVA基础:Collections 工具类实战指南-从排序到线程安全
  • Vtable
  • 如何用postman进行批量操作
  • 根据用户出生日期计算年龄
  • 从暴力到优化:解决「分数严格小于k的子数组数目」问题
  • 代码随想录算法训练营第六十一天 | floyd算法
  • JAVA JVM面试题(二)
  • 【angular19】入门基础教程(二):组件的创建与使用
  • DeepSeek智能时空数据分析(六):大模型NL2SQL绘制城市之间连线
  • J-Link RTT打印输出调试信息
  • 普推知产:商标驳回复审下初步审定公告了!
  • 早投早发表!3本 Nature 新子刊已开放投稿系统!
  • 深度学习---框架流程
  • Redis的高性能奥秘:深入解析IO多路复用与单线程事件驱动模型
  • docker安装部署TDengine实现主从复制
  • 车载软件架构 --- AUTOSAR的方法论
  • 西夏文残碑等文物来沪,见证一段神秘灿烂的历史
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长
  • 北汽蓝谷一季度净亏损9.5亿元,拟定增募资不超60亿元
  • 十四届全国人大常委会举行第四十三次委员长会议 ,听取有关草案和议案审议情况汇报
  • 李公明|一周画记:哈佛打响第一枪
  • 51岁国家移民管理局移民事务服务中心联络部副主任林艺聪逝世