Redis入门【精华】

举报
LoneWalker、 发表于 2023/08/27 16:40:21 2023/08/27
【摘要】 Redis入门【精华】

Redis简介🥑

Rediskey-value数据库(NoSQL,泛指非关系型数据库),Mysql是关系型数据库;

Redis数据操作主要在内存,而mysql主要存储在磁盘;

Redis在某一些场景使用中要明显优于Mysql,比如计数器、排行榜等方面;

Redis通常在一些特定场景需要与Mysql一起配合使用,两者并不是相互替换和竞争关系,而是搭配使用。

Redis在生产中使用场景最多的就是数据缓存,Redis性能极高、支持数据的持久化、支持数据的备份、多种数据类型。

Redis使用场景🍍

  1. 数据缓存。通过Redis将数据存放在内存中,所有的读操作都通过内存进行查询,提高了系统的数据查询能力。对于数据的读,在高并发的业务场景下,也可以将数据先写入内存中,在通过异步的方式持久化到磁盘中,提高了系统的并发能力。
  2. 存储用户登录token。针对用户登录鉴权,一般可以基于cookie、jwt来实现。cookie是基于文件存储,并且cookie会涉及到跨域、分布式架构问题,jwt由于是基于客户端存储方案,服务端无法直接控制登录token的状态。由于Redis是具备分布式部署架构,很好的解决了分布式架构token鉴权、用户登录状态等问题的控制。同时将登录token存放在Redis中,每次读取都采用内存读取,也提高了整个系统的性能。
  3. 秒杀场景。对于秒杀业务场景,对于系统的并发能力都是非常高的。在该场景下,将商品数据存储到Redis中,提高了系统的查询能力,减少了MySQL的压力。将商品库存都存储到Redis中,因Redis采用的是单线程架构,也可以实现商品超卖问题。
  4. 用户签到。可以使用 bitmap 数据类型,将用户签到存储在Redis中,然后通过异步线程将数据存储到MySQL中。既节约了内存,也提供了系统的读写能力。
  5. 消息队列。Redis提供List数据类型,技能用来做消息队列,也能用来做栈等场景。在 Redis5.0 开始,也提供了一种 stream 数据类型,提高了消息队列的可靠性。
  6. 社交场景。Redis提供了两种集合数据类型(set sortset),可以用在积分排行、好友推荐等场景。
  7. 就近推荐。Redis中是提供了一种 GEO 的数据类型来进行位运算。可以根据用户当前的经纬度,来计算附近的酒店、商场等场所的搜索与推荐功能。
  8. 分布式锁。

Redis数据类型

Redis的IO模型🌽

Redis 处理客户端请求所采用的处理架构,称为Redis的 IO 模型。Redis7采用的是多线程模型。

image.png

多线程IO模型中的“多线程”仅用于接收、解析客户端的请求,具体任务的处理仍然是交给主线程。

Redis命令🌯

基本命令

ping

键入 ping 命令,会看到 PONG 响应,则说明该客户端与 Redis 的连接是正常的。该命令亦称为心跳命令。

image.png

读写键值

set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。

image.png

select

Redis 默认有 16 个数据库,可以通过 select db 命令来切换 DB。

image.png

dbsize

dbsize 命令可以查看当前数据库中 key 的数量。

image.png

flushdb

flushdb 命令仅仅删除的是当前数据库中的数据,不影响其它库。

image.png

flushall

flushall 命令可以删除所有库中的所有数据。所以该命令的使用一定要慎重。

image.png

key操作命令

keys

  • 格式:KEYS pattern
  • 功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。
  • 说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服
  • 务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。

image.png

exists

  • 格式:EXISTS key
  • 功能:检查给定 key 是否存在。
  • 说明:若 key 存在,返回 1 ,否则返回 0 。

image.png

del

  • 格式:DEL key [key ...]
  • 功能:删除给定的一个或多个 key 。不存在的 key 会被忽略。
  • 说明:返回被删除 key 的数量。

image.png

rename

  • 格式:RENAME key newkey
  • 功能:将 key 改名为 newkey。
  • 说明:当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。

image.png

move

  • 格式:MOVE key db
  • 功能:将当前数据库的 key 移动到给定的数据库 db 当中。
  • 说明:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。移动成功返回 1 ,失败则返回 0 。

image.png

type

  • 格式:TYPE key
  • 功能:返回 key 所储存的值的类型。

image.png

expire 与 pexpire

  • 格式:EXPIRE key seconds
  • 功能:为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key被称为“易失的”(volatile)。
  • 说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。

image.png

字符串命令

decr

  • 格式:decr key
  • 功能:Decr 命令将 key 中储存的数字值减一。
  • 说明:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

image.png

incr

  • 格式:incr key
  • 功能:Incr 命令将 key 中储存的数字值增一。
  • 说明:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

image.png

strlen

  • 格式:strlen key
  • 功能:Strlen 命令用于获取指定 key 所储存的字符串值的长度。
  • 说明:当 key 储存的不是字符串值时,返回一个错误。

image.png

append

  • 格式:append key value
  • 功能:Append 命令用于为指定的 key 追加值。
  • 说明:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

image.png

哈希命令

hset

  • 格式:hset key field value
  • 功能:Hset 命令用于为哈希表中的字段赋值
  • 说明:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。

image.png

hget

  • 格式:hget key field
  • 功能:Hget 命令用于返回哈希表中指定字段的值
  • 说明:返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

image.png

hexists

  • 格式:hexists key field
  • 功能:Hexists 命令用于查看哈希表的指定字段是否存在。
  • 说明:如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

image.png

hlen

  • 格式:hexists key
  • 功能:Hlen 命令用于获取哈希表中字段的数量。
  • 说明:哈希表中字段的数量。 当 key 不存在时,返回 0 。

image.png

hdel

  • 格式:hdel key field1...
  • 功能:Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
  • 说明:被成功删除字段的数量,不包括被忽略的字段。

image.png

列表命令

lpush

  • 格式:lpush key value1...value 中间用空格隔开
  • 功能:Lpush 命令将一个或多个值插入到列表头部。
  • 说明:如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

image.png

lrange

  • 格式:lrange key start end
  • 功能:Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
  • 说明:其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

image.png

lindex

  • 格式:lindex key index_position
  • 功能:Lindex 命令用于通过索引获取列表中的元素。
  • 说明:也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

image.png

rpush

  • 格式:rpush key value1...value
  • 功能:Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
  • 说明:如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。

image.png

lrem

  • 格式:lrem key count value
  • 功能: Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
  • 说明:count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。

count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

count = 0 : 移除表中所有与 VALUE 相等的值。

image.png

集合命令

sadd

  • 格式:sadd key value1...value
  • 功能:Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
  • 说明:假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。返回值是被添加到集合中的新元素的数量,不包括被忽略的元素。当集合 key 不是集合类型时,返回一个错误。

image.png

smembers

  • 格式:smembers key
  • 功能:Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

image.png

scard

  • 格式:scard key
  • 功能:Scard 命令返回集合中元素的数量。当集合 key 不存在时,返回 0 。

image.png

srem

  • 格式:srem key member1...member
  • 功能:Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。