一、基础命令
1、ping(心跳命令)
若看到PONG响应,则说明客户端与Redis的连接时正常的。
2、select(切换数据库)
redis默认有 16 个数据库,默认使用的是0号DB。
3、dbsize(查看key数量)
查看当前数据库中 key 的数量。
4、flushdb(删除当前库中所有数据)
清楚当前DB中的所有数据,不影响其他DB。
5、flushall(删除所有DB中的数据)
二、Key 相关操作命令
1、keys pattern
查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。
说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。
eg:查看所有模式与查看所有开头结尾为‘a’的模式
keys a*a
2、exists key
检查给定 key 是否存在。
说明:若 key 存在,返回 1 ,否则返回 0 。
3、del key [key …]
删除给定的一个或多个 key 。不存在的 key 会被忽略。
说明:返回被删除 key 的数量。
4、rename key newkey
将 key 改名为 newkey
说明:当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。
5、move key db
将当前数据库的 key 移动到给定的数据库 db 当中。
说明:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。移动成功返回 1 ,失败则返回 0 。
6、type key
返回 key 所储存的值的类型。
说明:返回值有以下六种:none (key 不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)
7、expire/pexpire key seconds
为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key被称为“易失”(volatile)。
说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key的生存时间。
8、ttl/pttl key
TTL, time to live,返回给定 key 的剩余生存时间。
说明:其返回值存在三种可能:
1/当 key 不存在时,返回 -2 。
2/当 key 存在但没有设置剩余生存时间时,返回 -1 。
3/否则,返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒,而 pttl 命令返回的时间单位为毫秒。
9、persist key
去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”。
说明:当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,则返回 0。
10、randomkey
从当前数据库中随机返回(不删除)一个 key。
说明:当数据库不为空时,返回一个 key。当数据库为空时,返回 nil。
11、scan cursor [MATCH pattern] [COUNT count] [TYPE 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 中指定有序集合的所有元素(数值与元素值)
三、String型Value操作命令
Redis 存储数据的 Value 可以是一个 String 类型数据。String 类型的Value 是 Redis 中最基本,最常见的类型。String 类型的 Value 中可以存放任意数据,包括数值型,甚至是二进制的图片、音频、视频、序列化对象等。一个 String 类型的 Value 最大是 512M 大小。
1、set key value [EX seconds | PX milliseconds] [NX|XX]
SET 除了可以直接将 key 的值设为 value 外,还可以指定一些参数:
EX seconds:为当前 key 设置过期时间,单位秒。等价于 SETEX 命令。
PX milliseconds:为当前 key 设置过期时间,单位毫秒。等价于 PSETEX 命令。
NX:指定的 key 不存在才会设置成功,用于添加指定的 key。等价于 SETNX 命令。
XX:指定的 key 必须存在才会设置成功,用于更新指定key 的value。
说明:如果value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。
2、setex/psetex key seconds value
set expire,其不仅为 key 指定了value,还为其设置了生存时间。setex 的单位为秒,psetex 的单位为毫秒。
说明:如果 key 已经存在, 则覆写旧值。该命令类似于以下两个命令,不同之处是, SETEX 是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
-
SET key value
-
EXPIRE key seconds # 设置生存时间
3、setnx key value
SET if Not eXists,将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key已经存在,则 SETNX 不做任何动作。成功,返回 1,否则,返回 0。
说明:该命令等价于 set key value nx
4、getset key value
将给定 key 的值设为 value ,并返回 key 的旧值。
说明:当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。
5、mset/msetnx key value [key value …]
同时设置一个或多个 key-value 对。
说明:如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是所希望的效果,可以考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情 况下进行设置操作。MSET/MSETNX 是一个原子性(atomic)操作,所有给定 key 都会在同 一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。该命令永不失败。
6、mget key [key …]
返回所有(一个或多个)给定 key 的值。
说明:如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。
7、append key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
说明:追加 value 之后, key 中字符串的长度。
8、incr/decr key
increment,自动递增。将 key 中存储的数字值增一。decrement,自动递减。将 key 中存储的数字值减一。
说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后的值。
9、incrby/decrby key increment
将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。
说明:如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。
10、incrbyfloat key increment
为 key 中所储存的值加上浮点数增量 increment 。
说明:与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。
11、strlen key
返回 key 所储存的字符串值的长度。
说明:当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0 。
12、getrange key start end
返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。
说明:end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。
13、setrange key offset value
用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。
说明:当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。
14、位操作命令
名称中包含 BIT 的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield,这些命令不常用。
15、典型应用场景
1)数据缓存:Redis 作为数据缓存层,MySQL 作为数据存储层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从MySQL 中获取后先存入缓存层再返回给应用服务器。
2)计数器:在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等。每个有效客户端访问一次,或视频每播放一次,都是直接修改 Redis 中的计数器,然后再以异步方式持久化到其它数据源中,例如持久化到 MySQL。
3)共享Session:对于一个分布式应用系统,如果将类似用户登录信息这样的 Session 数据保存在提供登录服务的服务器中,那么如果用户再次提交像收藏、支付等请求时可能会出现问题:在提供收藏、支付等服务的服务器中并没有该用户的 Session 数据,从而导致该用户需要重新登录。对于用户来说,这是不能接受的。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。这样就不会引发“重新登录”问题。
4)限速器:现在很多平台为了防止 DoS(Denial of Service,拒绝服务)攻击,一般都会限制一个 IP不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。注意,其无法防止 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击。
四、Hash型Value操作命令
Hash 表就是一个映射表 Map,也是由键-值对构成,为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。
1、hset key field value
将哈希表 key 中的域 field 的值设为 value 。
说明:如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
2、hget key field
返回哈希表 key 中给定域 field 的值。
说明:当给定域不存在或是给定 key 不存在时,返回 nil 。
3、hmset key field value [field value …]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
说明:此命令会覆盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。
4、hmget key field [field …]
按照给出顺序返回哈希表 key 中一个或多个域的值。
说明:如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
5、hgetall key
返回哈希表 key 中所有的域和值。
说明:在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。若 key 不存在,返回空列表。若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般不使用该命令,而使用 hscan 命令代替。
6、hsetnx key field value
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
说明:若域 field 已经存在,该操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
7、hdel key field [field …]
删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
说明:返回被成功移除的域的数量,不包括被忽略的域。
8、hexists key field
查看哈希表 key 中给定域 field 是否存在。
说明:如果哈希表含有给定域,返回 1 。如果不含有给定域,或 key 不存在,返回 0 。
9、hincrby/hincrbyfloat key field increment
为哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。
说明:增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
10、hkeys/hvals key
返回哈希表 key 中的所有域/值。
说明:当 key 不存在时,返回一个空表。
11、hlen key
返回哈希表 key 中域的数量。
说明:当 key 不存在时,返回 0 。
12、hstrlen key field
返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。
说明:如果给定的键或者域不存在, 那么命令返回 0 。
13、典型应用场景
Hash 型 Value 非常适合存储对象数据,比如:活动信息。key 为对象名称,value 为描述对象属性的 Map,对对象属性的修改在Redis 中就可直接完成。其不像String 型 Value 存储对象,那个对象是序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为JSON 串后写入到 Redis。
五、List型Value操作命令
标签:返回,哈希,基础,Redis,value,field,给定,key,命令集 From: https://www.cnblogs.com/beatle-go/p/18003129