数据库系列文章:
关系型数据库:
- MySQL —— 基础语法大全
- MySQL —— 进阶
非关系型数据库:
- Redis 的安装与配置
Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令,对 Key
的操作命令,对 Value
的操作命令。
⭐️ 3.1.1、 心跳命令 ping
ping
命令,会看到 PONG
响应,则说明该客户端与 Redis 的连接是正常的。该命令亦称为 心跳命令。⭐️ 3.1.2、读写键值命令
set key value
会将指定 key value
写入到 DB 。 get key
则会读取指定 key
的 value
值。关于更多 set
与 get
命令格式,后面会详细学习。⭐️ 3.1.3、 DB切换 select
0
号 DB ,可以通过 select db
索引来切换 DB 。
select 3
切换到 DB3 ,并会将 age-23
写入到 DB3 中。⭐️ 3.1.4、 查看 key 数量 dbsize
dbsize
命令可以查看 当前数据库 中 key
的数量。key
; DB1 中没有 key
; DB3 中有 1 个 key
。⭐️ 3.1.5、 删除当前库中数据 flushdb
flushdb
命令仅仅 删除的是当前数据库中的数据,不影响其它库。⭐️ 3.1.6、 删除所有库中数据命令 flushall
flushall
命令可以删除所有库中的所有数据。所以该命令的使用一定要慎重。⭐️ 3.1.7、 退出客户端命令
exit
或 quit
命令均可退出 Redis 命令行客户端。Redis 中 存储的数据整体 是一个 Map
,其 key
为 String
类型,而 value
则可以是 String
、Hash 表
、 List
、 Set
等类型。
⭐️ 3.2.1、keys
KEYS pattern
pattern
的 key
, pattern
为正则表达式 。KEYS
的速度非常快,但在一个大的数据库中使用它可能会 阻塞 当前服务器的服务 。 所以生产环境中一般不使用该命令,而使用 scan
命令代替。⭐️ 3.2.2、exists
EXISTS key
key
是否存在。key
存在,返回 1
,否则返回 0
。⭐️ 3.2.3、del
DEL key [key ...]
key
。不存在的 key
会被忽略。key
的数量。⭐️ 3.2.4、rename
RENAME key newkey
key
改名为 newkey
。key
和 newkey
相同,或者 key
不存在时,返回一个错误。当 newkey
已经存在时, RENAME
命令将覆盖旧值。改名成功时提示 OK
,失败时候返回一个错误。⭐️ 3.2.5、move
MOVE key db
key
移动 到 给定的数据库 db 当中。key
,或者 key
不存在于 当前数据库,那么 MOVE
没有任何效果。 移动成功返回 1
,失败则返回 0
。⭐️ 3.2.6、type
TYPE key
key
所储存的 值的类型。none
(key
不存在)string
字符串list
列表set
集合zset
有序集hash
哈希表⭐️ 3.2.7、expire 与 pexpire
EXPIRE key seconds
key
设置生存时间 。 当 key
过期时 (生存时间为 0),它会被自动删除。
expire
的时间单位为 秒
, pexpire
的时间单位为 毫秒
。key
被称为 "易失的” ( volatile
)。key
不存在 时 返回 0 。 rename
操作不会改变 key
的生存时间。⭐️ 3.2.8、ttl 与 pttl
TTL key
TTL
, time to live
,返回给定 key
的 剩余生存时间。key
不存在时,返回 -2
。key
存在但没有设置剩余生存时间时,返回 1
。key
的剩余生存时间。 ttl
命令返回的时间单位为 秒
,而 pttl
命令返回的时间单位为 毫秒
。⭐️ 3.2.9、persist
PERSIST key
key
的生存时间,将这个 key
从 “易失的” 转换成 “持久的” 。key
不存在或 key
没有设置生存时间, 则返回 0 。⭐️ 3.2.10、randomkey
RANDOMKEY
key
。key
。当数据库为空时,返回 nil
。⭐️ 3.2.11、scan
SCAN cursor [MATCH pattern] [COUNT count] [TYPE
cursor
:本次迭代开始的 游标。pattern
:本次迭代要 匹配的 key
的模式。count
:本次迭代要从数据集里返回多少元素,默认值为 10
。type
本次迭代要返回的 value
的类型,默认为所有类型
。SCAN 命令是一个基于游标
cursor
的迭代器:
- SCAN 命令每次被调用之后,都会向用户返回一个 包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标,而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。 用户在下次迭代时需要使用这个新游标作为
SCAN
命令的游标参数,以此来延续之前的迭代程。- 当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。 如果新游标返回 0 表示迭代已结束。
当数据量很大时,
count
的数量的指定可能会不起作用, Redis 会自动调整每次的遍历数目。 由于 scan 命令 每次执行都只会返回少量元素,所以该命令可以用于生产环境,而不会出现像KEYS
命令带来的服务器阻塞问题。
增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止,换句话说,如果被迭代数据集的大小不断地增长的话,增量式迭代命令可能永远也无法完成一次完整迭代。 即 当一个数据集不断地变大时,想要访问这个数据集中 的所有元素就需要做越来越多的工作, 能否结束一个迭代取决于用户执行迭代的速度是否比数据集增长的速度更快。
相关命令:另外还有 3 个 scan 命令用于对三种类型的value
进行遍历。
hscan
:属于Hash
型Value
操作命令集合,用于遍历当前 db 中指定Hash 表
的所有field-value
对。sscan
:属于Set
型Value
操作命令集合,用于 遍历当前 db 中指定set 集合
的所有元素zscan
:属于ZSet
型Value
操作命令集合,用于 遍历当前 db 中指定有序集合
的所有元素(数值与元素值)
Redis 存储数据的 Value
可以是 一个 String
类型数据。 String
类型的 Value
是 Redis 中最基本,最常见的类型。 String
类型的 Valu
e 中可以存放任意数据, 包括 数值型
,甚至是二进制的 图片
、音频
、视频
、序列化对象
等。一个 String
类型的 Value
最大是 512M 大小。
⭐️ 3.3.1、set
SET key value [EX seconds | PX milliseconds] [NX|
SET
除了可以直接将 key
的值设为 value
外,还可以指定一些参数。
EX seconds
:为当前 key
设置过期时间,单位 秒
。等价于 SETEX
命令。PX milliseconds
:为当前 key
设置过期时间,单位 毫秒
。等价于 PSETEX
命令。NX
:指定的 key
不存在才会设置成功,用于添加指定的 key
。等价于 SETNX
命令。XX
:指定的 key
必须存在才会设置成功,用于更新指定 key
的 value
。⭐️ 3.3.2、setex 与 psetex
SETEX /PSETEX key seconds value
set expire
,其不仅为 key
指定了 value
,还为其设置了生存时间。 setex
的单位为秒
, psetex
的单位为毫秒
。key
已经存在, 则覆写旧值。该命令类似于以下两个命令,不同之处是,SETEX
是一个原子性操作,关联值 和 设置生存时间两个动作会在同一时间内完成,该命SET key value
EXPIRE key seconds
#设置生存时间⭐️ 3.3.3、setnx
SETNX key value
SET if Not eXists
,将 key
的值设为 value
,当且仅当 key
不存在。若给定的 key
已经存在,则 SETNX
不做任何动作。 成功,返回 1 ,否则 ,返回 0 。set key value nx
⭐️ 3.3.4、getset
GETSET key value
key
的值设为 value
,并返回 key
的旧值。key
存在但不是字符串类型时,返回一个错误; 当 key
不存在时,返回 nil
。⭐️ 3.3.5、mset 与 msetnx
MSET /MSETNX key value [key value ...]
key-value
对。key
已经存在,那么 MSET
会用 新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX
命令:它只会在所有给定 key
都不存在的情况下进行设置操作。 MSET/MSETNX
是一个原子性 (atomic) 操作,所有给定 key
都会在同一时间内被设置,某些给定 key
被更新而另一些给定 key
没有改变的情况不可能发生。该命令永不失败。⭐️ 3.3.6、mget
MGET key [key ...]
key
的值。key
里面,有某个 key
不存在,那么这个 key
返回特殊值 nil
。因此,该命令永不失败。⭐️ 3.3.7、append
APPEND key value
key
已经存在并且是一个字符串, APPEND
命令将 value
追加到 key
原来的值的末尾。如果 key
不存在, APPEND
就简单地将给定 key
设为 value
,就像执行 SET key value
一样。value
之后, key
中字符串的长度。⭐️ 3.3.8、incr 与 decr
INCR key
或 DECR key
increment
,自动递增。 将 key
中存储的数字值增一。decrement
,自动递减。将 key 中存储的数字值减一。key
不存在,那么 key
的值会先被初始化为 0
,然后再执行 增一/减一
操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一 后的值。⭐️ 3.3.9、incrby 与 decrby
INCRBY key increment
或 DECRBY key decrement
key
中存储的数字值 增加/减少
指定的数值,这个数值只能是整数,可以是负数,但不能是小数。key
不存在,那么 key
的值会先被初始化为 0
,然后再执行 增/减
操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回 增/减
后的值。⭐️ 3.3.10、incrbyfloat
INCRBYFLOAT key increment
key
中所储存的值加上 浮点数增量 increment
。decrbyfloat
命令,但 increment
为负数可以实现减操作效果。⭐️ 3.3.11、strlen
STRLEN key
key
所储存的字符串值的长度。key
储存的不是字符串值时,返回一个错误,当 key
不存在时,返回 0
。⭐️ 3.3.12、getrange
GETRANGE key start end
key
中字符串值的 子字符串,字符串的截取范围由 start
和 end
两个偏移量决定 包括 start
和 end
在内。end
必须要比 start
大。支持 负数偏移量 表示从字符串最后开始计数, -1
表示最后一个字符, -2
表示倒数第二个,以此类推。⭐️ 3.3.13、setrange
SETRANGE key offset value
value
参数替换给定 key
所储存的字符串值 str
,从偏移量 offset
开始。offset
值大于 str
长度时,中间使用零字节 \x00
填充,即 0000 0000
字节填充;对于 不存在的 key
当作空串处理。⭐️ 3.3.14、位运算命令
⭐️ 3.3.15、典型应用场景
⭐️ 3.4.1、hset
⭐️ 3.4.2、hget
⭐️ 3.4.3、hmset
⭐️ 3.4.4、hmget
⭐️ 3.4.5、hgetall
⭐️ 3.4.6、hsetnx
⭐️ 3.4.7、hdel
⭐️ 3.4.8、hexits
⭐️ 3.4.9、hincrby 与 hincrbyfloat
⭐️ 3.4.10、hkeys 与 hvals
⭐️ 3.4.11、hlen
⭐️ 3.4.12、hstrlen
⭐️ 3.4.13、应用场景
⭐️ 3.5.1、lpush/rpush
⭐️ 3.5.2、llen
⭐️ 3.5.3、lindex
⭐️ 3.5.4、lset
⭐️ 3.5.5、lrange
⭐️ 3.5.6、lpushx 与 rpushx
⭐️ 3.5.7、linsert
⭐️ 3.5.8、lpop / rpop
⭐️ 3.5.9、blpop / brpop
⭐️ 3.5.10、rpoplpush
⭐️ 3.5.11、brpoplpush
⭐️ 3.5.12、lrem
⭐️ 3.5.13、itrim
⭐️ 3.5.14、应用场景
⭐️ 3.5.、
⭐️ 3.5.、
Redis 命令 快速食用:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
Redis 持久化 快速食用:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------->