广东网站建设联系,wordpress 内容可以是表格吗,购物网站要多少钱,wordpress 登陆图标Redis 根据命令所操作对象的不同#xff0c;可以分为三大类#xff1a;对 Redis 进行基础性操作的命令#xff0c;对 Key 的操作命令#xff0c;对 Value 的操作命令。 3.1 Redis 基本命令
一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入
首先通过 redis-…Redis 根据命令所操作对象的不同可以分为三大类对 Redis 进行基础性操作的命令对 Key 的操作命令对 Value 的操作命令。 3.1 Redis 基本命令
一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入
首先通过 redis-cli 命令进入到 Redis 命令行客户端然后再运行下面的命令。
3.1.1 心跳命令 ping
键入 ping 命令会看到 PONG 响应则说明该客户端与 Redis 的连接是正常的。该命令亦称为心跳命令。
3.1.2 读写键值命令 set/get
set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。
关于更多 set 与 get 命令格式后面会详细学习。
3.1.3 切换数据库 select
默认使用的是 0 号 DB可以通过 select db 索引来切换 DB。例如如下命令会切换到DB3
select 33.1.4 查看 key 数量 dbsize 3.1.5 删库跑路
flushdb删除当前库所有数据 flushall删除所有库的所有的信息
3.1.6 退出redis自带命令行客户端
exit / quit 3.2 Key操作命令
Redis 中存储的数据整体是一个 Map其 key 为 String 类型而 value 则可以是 String、 Hash 表、List、Set 等类型。
3.2.1 Keys
格式KEYS pattern 功能查找所有符合给定模式 pattern 的 keypattern 为正则表达式。 说明KEYS 的速度非常快但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令而使用 scan 命令代替。
keys * 返回数据库中所有键
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 的时间单位为毫秒。在 Redis 中带有生存时间的 key被称为“易失的”(volatile)。 说明生存时间设置成功返回 1。若 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 从“易失的”转换成“持久的”。 说明当生存时间移除成功时返回 1若 key 不存在或 key 没有设置生存时间则返回 0。
3.2.10 randomkey 给数据库判空
格式RANDOMKEY 功能从当前数据库中随机返回(不删除)一个 key。 说明当数据库不为空时返回一个 key。当数据库为空时返回 nil。
3.2.11 scan
格式SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] 功能用于迭代数据库中的数据库键。其各个选项的意义为 cursor本次迭代开始的游标。 pattern 本次迭代要匹配的 key 的模式。 count 本次迭代要从数据集里返回多少元素默认值为 10 。 type本次迭代要返回的 value 的类型默认为所有类型。
相关命令另外还有 3 个 scan 命令用于对三种类型的 value 进行遍历。 hscan属于 Hash 型 Value 操作命令集合用于遍历当前 db 中指定 Hash 表的所有 field-value 对。 sscan属于 Set 型 Value 操作命令集合用于遍历当前 db 中指定 set 集合的所有元素 zscan属于 ZSet 型 Value 操作命令集合用于遍历当前 db 中指定有序集合的所有元素数值与元素值 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个存储集合的键名。而 SCAN 命令则不需要在第一个参数提供任何数据库键 —— 因为它遍历的是当前数据库中的所包含的键。
3.2.11.1 SCAN命令基本过程
SCAN 命令是一个基于游标 cursor (指示开始位置)的迭代器SCAN 命令每次被调用之后都会向用户返回返回一个包含两个元素的数组 第一个元素是用于进行下一次迭代的新游标 而第二个元素则是一个数组 这个数组中包含了所有被迭代的元素。用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数以此来延续之前的迭代过程。当SCAN 命令的游标参数被设置为 0 时服务器将开始一次新的迭代。如果新游标返回 0 表示迭代已结束。
3.2.11.2 SCAN命令有效性
SCAN 命令仅仅使用游标来记录遍历状态 所以这些命令带有以下缺点
同一个元素可能会被返回多次。 处理重复元素的工作交由应用程序负责 比如说, 可以考虑将遍历返回的元素只用于可以安全地重复执行多次的操作上。如果一个元素是在遍历过程中被添加到数据集的 又或者是在遍历过程中从数据集中被删除的 那么这个元素可能会被返回 也可能不会 这是不确定的。
3.2.11.3 SCAN命令每次执行返回的元素数量
SCAN 命令族并不保证每次执行都返回某个给定数量的元素。增量式命令甚至可能会返回零个元素 但只要命令返回的游标不是 0 应用程序就不应该将遍历视作结束。
不过命令返回的元素数量总是符合一定规则的 在实际中对于一个大数据集来说 增量式遍历命令每次最多可能会返回数十个元素而对于一个足够小的数据集来说 小集合键、小哈希键和小有序集合键 那么增量遍历命令将在一次调用中返回数据集中的所有元素。
3.2.11.4 COUNT 选项 COUNT 选项的作用就是让用户告知遍历命令 在每次遍历中应该从数据集里返回多少元素 这个选项只是对增量式遍历命令的一种提示 有些时候这种提示会失效。 Redis 会自动调整每次的遍历数目。由于 scan 命令每次执行都只会返回少量元素所以该命令可以用于生产环境而不会出现像 KEYS 命令带来的服务器阻塞问题。 增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止能否结束一个迭代取决于用户执行迭代的速度是否比数据集增长的速度更快。 重要: 并非每次遍历都要使用相同的 COUNT 值。用户可以在每次遍历中按自己的需要随意改变 COUNT 值 只要记得将上次遍历返回的游标用到下次遍历里面就可以了。
3.2.11.5 MATCH选项
对元素的模式匹配工作是在命令从数据集中取出元素之后 向客户端返回元素之前的这段时间内进行的 所以如果被遍历的数据集太大, 而且数据集中又只有少量元素和模式相匹配 那么遍历命令或许会在多次执行中都不返回任何元素。
对此,我们可以设置一个很大count, 强制返回更多数据以供匹配.
3.2.11.5 TYPE选项
从6.0版开始使用 TYPE 选项要求 SCAN 只返回与给定类型匹配的对象TYPE选项仅在整个数据库SCAN 命令上可用HSCAN 或 ZSCAN 等无效。与MATCH类似, TYPE 筛选器会在从数据库中获取到元素后应用因此该选项不会减少服务器完成完整遍历所必须执行的工作量对于罕见类型可能在多次遍历中没有收到任何元素。
3.2.11.6 使用错误的游标进行增量式遍历
在同一时间 可以有任意多个客户端对同一数据集进行遍历 客户端每次执行遍历都需要传入一个游标 并在遍历执行之后获得一个新的游标 而这个游标就包含了遍历的所有状态 因此 服务器无须为遍历记录任何状态。只有两种游标是合法的 a. 在开始一个新的遍历时 游标必须为 0。 b. 增量式遍历命令在执行之后返回的游标值 用于延续continue遍历过程的游标。使用非法游标并不会造成崩溃, 但可能会产生不确定的结果.
实验: 先往数据库中插入数据成这样 : 注意: 集合Set是一种无序的数据结构即使按照一定的顺序插入元素Redis在内部存储时并不保证保持相同的顺序。 指令含义: 从0开始, 返回3个键. 返回内容:x a. 返回的最后一个键是c,c是下一次从4开始 b. 返回的头三个键
3.3 String型Value命令(*)
**如果 value 字符串中带有空格则该字符串必须使用双引号或单引号引起来否则报错. 因此 , 在具体开发中, 建议每次写Value值时都使用括号
Redis 存储数据的 Value 可以是一个 String 类型数据。String 类型的 Value 是 Redis 中最基本最常见的类型。String 类型的 Value 中可以存放任意数据包括数值型甚至是二进制的图片、音频、视频、序列化对象等。一个 String 类型的 Value 最大是 512M.
3.3.1 SET
格式: SET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX] [GET]EX seconds – 设置键key的过期时间单位时秒PX milliseconds – 设置键key的过期时间单位时毫秒NX – 只有键key不存在的时候才会设置key的值XX – 只有键key存在的时候才会设置key的值KEEPTTL(6.0后新增) – 获取 key 的过期时间GET(6.2后新增) – 返回 key 存储的值如果 key 不存在返回空
注意: 由于SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX, GETSET,的功能所以在将来的版本中redis可能会不推荐使用并且最终抛弃这几个命令。
3.3.2 SETEX和PSETEX
格式SETEX/PSETEX key seconds value 功能set expire其不仅为 key 指定了 value还为其设置了生存时间。setex 的单位为秒psetex 的单位为毫秒。 说明如果 key 已经存在 则覆写旧值。该命令类似于以下两个命令不同之处是 SETEX 是一个原子性操作关联值和设置生存时间两个动作会在同一时间内完成该命令在 Redis 用作缓存时非常实用。 SET key value EXPIRE key seconds # 设置生存时间
3.3.4 GETSET
格式GETSET key value 功能将给定 key 的值设为 value 并返回 key 的旧值。 返回值当 key 存在但不是字符串类型时返回一个错误当 key 不存在时返回 nil 。
3.3.5 MSET和MSETNX
格式MSET/MSETNX key1 value1 [key2 value2 …] 功能同时设置一个或多个 key-value 对。 说明MSET 和MSETNX就是SET和SETNX的升级, 同时支持1或多键值对版本() 说明1如果某个给定 key 已经存在那么 MSET 会用新值覆盖原来的旧值如果这不是你所希望的效果请考虑使用 MSETNX 命令它只会在所有给定 key 都不存在的情况下进行设置操作。 说明2 MSET/MSETNX 是一个原子性(atomic)操作所有给定 key 都会在同一时间内被设置某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。 返回值: 总是返回“OK”因为 MSET 不会失败。
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 功能将 key 中存储的数字值增加/减少指定的数值这个数值只能是整数可以是负数但不能是小数。 返回值如果 key 不存在那么 key 的值会先被初始化为 0然后再执行增/减操作。如果值不能表示为数字那么返回一个错误提示。如果执行正确则返回增/减后的值。 说明: 本质上这是一个整数操作因为Redis没有专门的整数类型。存储在 key 中的字符串被转换为十进制有符号整数在此基础上加1。
3.3.9 INCRBY和DECRBY
格式: INCRBY key increment 或 DECRBY key decrement 功能将 key 中存储的数字值增加/减少指定的数值increment / decrement这个数值只能是整数可以是负数但不能是小数。 返回值如果 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 对应Value值的子字符串字符串的截取范围由 start 和 end 两个偏移量决定包括 start 和 end 在内。 用途: GETRANGE 通过将结果范围限制为字符串的实际长度来处理超出范围的请求。 说明**end 必须要比 start 大。**支持负数偏移量表示从字符串最后开始计数-1 表示最后一个字符-2 表示倒数第二个以此类推。
3.3.13 SETRANGE
格式SETRANGE key offset value 功能从偏移量 offset 开始, 用 value 参数替换给定 key 所储存的字符串值 str。 说明当 offset 值大于 str 长度时中间使用零字节\x00 填充即 0000 0000 字节填充对于不存在的 key 当作空串处理。 不存在的key的例子:
3.3.15 位操作命令
名称中包含 BIT 的命令都是对二进制位的操作命令例如setbit、getbit、bitcount、 bittop、bitfield这些命令不常用。
3.3.15 典型应用场景
3.3.15.1 数据缓存
Redis 作为数据缓存层MySQL 作为数据存储层。应用服务器首先从 Redis 中获取数据如果缓存层中没有则从 MySQL 中获取后先存入缓存层再返回给应用服务器。
3.3.15.2 计数器