Redis入门【精华】
Redis简介🥑
Redis是key-value数据库(NoSQL,泛指非关系型数据库),Mysql是关系型数据库;
Redis数据操作主要在内存,而mysql主要存储在磁盘;
Redis在某一些场景使用中要明显优于Mysql,比如计数器、排行榜等方面;
Redis通常在一些特定场景需要与Mysql一起配合使用,两者并不是相互替换和竞争关系,而是搭配使用。
Redis在生产中使用场景最多的就是数据缓存,而Redis性能极高、支持数据的持久化、支持数据的备份、多种数据类型。
Redis使用场景🍍
- 数据缓存。通过Redis将数据存放在内存中,所有的读操作都通过内存进行查询,提高了系统的数据查询能力。对于数据的读,在高并发的业务场景下,也可以将数据先写入内存中,在通过异步的方式持久化到磁盘中,提高了系统的并发能力。
- 存储用户登录token。针对用户登录鉴权,一般可以基于cookie、jwt来实现。cookie是基于文件存储,并且cookie会涉及到跨域、分布式架构问题,jwt由于是基于客户端存储方案,服务端无法直接控制登录token的状态。由于Redis是具备分布式部署架构,很好的解决了分布式架构token鉴权、用户登录状态等问题的控制。同时将登录token存放在Redis中,每次读取都采用内存读取,也提高了整个系统的性能。
- 秒杀场景。对于秒杀业务场景,对于系统的并发能力都是非常高的。在该场景下,将商品数据存储到Redis中,提高了系统的查询能力,减少了MySQL的压力。将商品库存都存储到Redis中,因Redis采用的是单线程架构,也可以实现商品超卖问题。
- 用户签到。可以使用 bitmap 数据类型,将用户签到存储在Redis中,然后通过异步线程将数据存储到MySQL中。既节约了内存,也提供了系统的读写能力。
- 消息队列。Redis提供List数据类型,技能用来做消息队列,也能用来做栈等场景。在 Redis5.0 开始,也提供了一种 stream 数据类型,提高了消息队列的可靠性。
- 社交场景。Redis提供了两种集合数据类型(set sortset),可以用在积分排行、好友推荐等场景。
- 就近推荐。Redis中是提供了一种 GEO 的数据类型来进行位运算。可以根据用户当前的经纬度,来计算附近的酒店、商场等场所的搜索与推荐功能。
- 分布式锁。
Redis数据类型
Redis的IO模型🌽
Redis 处理客户端请求所采用的处理架构,称为Redis的 IO 模型。Redis7采用的是多线程模型。
多线程IO模型中的“多线程”仅用于接收、解析客户端的请求,具体任务的处理仍然是交给主线程。
Redis命令🌯
基本命令
ping
键入 ping 命令,会看到 PONG 响应,则说明该客户端与 Redis 的连接是正常的。该命令亦称为心跳命令。
读写键值
set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。
select
Redis 默认有 16 个数据库,可以通过 select db 命令来切换 DB。
dbsize
dbsize 命令可以查看当前数据库中 key 的数量。
flushdb
flushdb 命令仅仅删除的是当前数据库中的数据,不影响其它库。
flushall
flushall 命令可以删除所有库中的所有数据。所以该命令的使用一定要慎重。
key操作命令
keys
- 格式:KEYS pattern
- 功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。
- 说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服
- 务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。
exists
- 格式:EXISTS key
- 功能:检查给定 key 是否存在。
- 说明:若 key 存在,返回 1 ,否则返回 0 。
del
- 格式:DEL key [key ...]
- 功能:删除给定的一个或多个 key 。不存在的 key 会被忽略。
- 说明:返回被删除 key 的数量。
rename
- 格式:RENAME key newkey
- 功能:将 key 改名为 newkey。
- 说明:当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。
move
- 格式:MOVE key db
- 功能:将当前数据库的 key 移动到给定的数据库 db 当中。
- 说明:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。移动成功返回 1 ,失败则返回 0 。
type
- 格式:TYPE key
- 功能:返回 key 所储存的值的类型。
expire 与 pexpire
- 格式:EXPIRE key seconds
- 功能:为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key被称为“易失的”(volatile)。
- 说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。
字符串命令
decr
- 格式:decr key
- 功能:Decr 命令将 key 中储存的数字值减一。
- 说明:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
incr
- 格式:incr key
- 功能:Incr 命令将 key 中储存的数字值增一。
- 说明:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
strlen
- 格式:strlen key
- 功能:Strlen 命令用于获取指定 key 所储存的字符串值的长度。
- 说明:当 key 储存的不是字符串值时,返回一个错误。
append
- 格式:append key value
- 功能:Append 命令用于为指定的 key 追加值。
- 说明:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
哈希命令
hset
- 格式:hset key field value
- 功能:Hset 命令用于为哈希表中的字段赋值
- 说明:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。
hget
- 格式:hget key field
- 功能:Hget 命令用于返回哈希表中指定字段的值
- 说明:返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。
hexists
- 格式:hexists key field
- 功能:Hexists 命令用于查看哈希表的指定字段是否存在。
- 说明:如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
hlen
- 格式:hexists key
- 功能:Hlen 命令用于获取哈希表中字段的数量。
- 说明:哈希表中字段的数量。 当 key 不存在时,返回 0 。
hdel
- 格式:hdel key field1...
- 功能:Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
- 说明:被成功删除字段的数量,不包括被忽略的字段。
列表命令
lpush
- 格式:lpush key value1...value 中间用空格隔开
- 功能:Lpush 命令将一个或多个值插入到列表头部。
- 说明:如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
lrange
- 格式:lrange key start end
- 功能:Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定
- 说明:其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
lindex
- 格式:lindex key index_position
- 功能:Lindex 命令用于通过索引获取列表中的元素。
- 说明:也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
rpush
- 格式:rpush key value1...value
- 功能:Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
- 说明:如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
lrem
- 格式:lrem key count value
- 功能: Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
- 说明:count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
集合命令
sadd
- 格式:sadd key value1...value
- 功能:Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
- 说明:假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。返回值是被添加到集合中的新元素的数量,不包括被忽略的元素。当集合 key 不是集合类型时,返回一个错误。
smembers
- 格式:smembers key
- 功能:Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
scard
- 格式:scard key
- 功能:Scard 命令返回集合中元素的数量。当集合 key 不存在时,返回 0 。
srem
- 格式:srem key member1...member
- 功能:Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
- 点赞
- 收藏
- 关注作者
评论(0)