redis基本操作


Redis 基本(basic)命令

Redis 键(key)命令

Redis 数据类型概述

Redis 字符串(String)

Redis 哈希(Hash)

Redis 列表(List)

Redis 集合(Set)

Redis 有序集合(sorted set)


Redis 基本(basic)命令

1、Redis 命令用于在 redis 服务上执行操作,要在 redis 服务上执行命令需要一个 redis 客户端。安装目录下的 redis-cli 就是自带的测试客户端。

命令行启动自带的 redis-cli 客户端连接到本地的 redis 服务:redis-cli连接远程 redis 服务器:redis-cli -h host -p port -a password

PING 用于检测 redis 服务是否启动,连接是否正常,连接成功时返回 PONG
select index Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
exit 退出 redis-cli
auth password 当 redis 服务器开启密码验证,客户端连接时没有指定密码时,连接后必须使用 “auth 密码” 先进行授权,否则其它命令会使用不了。
set key value 往 redis 数据库设置数据
get key 从 redis 数据库读取数据。key 不存在时,返回 nil
keys * 查询 redis 数据库中的所有 key 值
del key 删除指定的 key 的内容

img

Redis 键(key)命令

1、Redis 键命令用于管理 redis 的键。

2、Redis 键命令的基本语法:command KEY_NAME

序号 命令 描述
1 del key 删除指定的 key。key 不存在时不影响。可以同时删除多个,如 del key1 key2 …。list、set、zset、hash 中的元素全部删除后,key 也会自动被删除。
2 dump key 序列化给定 key ,并返回被序列化的值。
3 exists key 检查给定 key 是否存在。返回 1 表示存在,返回 0 表示不存在。
4 expire key seconds 为给定 key 设置过期时间。单位 秒。如果 key 后续被重新设置值,比如 set key value,则 key 过期时间失效。
5 expireat key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。如果 key 后续被重新设置值,比如 set key value,则 key 过期时间失效。
6 pexpire key milliseconds 设置 key 的过期时间亿以毫秒计。如果 key 后续被重新设置值,比如 set key value,则 key 过期时间失效。
7 pexpireat key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计。如果 key 后续被重新设置值,比如 set key value,则 key 过期时间失效。
8 keys pattern 查找所有符合给定模式( pattern)的 key 。* 表示1个或多个,? 表示一个任意字符。keys * :查找所有key,keys user*:查找以 user 开头的 key,keys ag?:查找 ag 开头,且后面只有一个字符的 key。
9 move key db 将当前数据库的 key 移动到给定的数据库 db 当中。
10 persist key 移除 key 的过期时间,key 将持久保持。
11 pttl key 以毫秒为单位返回 key 的剩余的过期时间。如果没有对 key 设置超时,则返回 -1;-1 表示超时不存在。正常情况返回大于0的正数。
12 ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13 randomkey 从当前数据库中随机返回一个 key 。
14 rename key newkey 修改 key 的名称。key 不存在时会报错:(error) ERR no such key。如果 newkey 已经存在时,则会删除旧值。
15 renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。key 不存在时报错。
16 type key 返回 key 所储存的值的类型。有 string、list、set、zset、hash。如果 key 不存在,则返回 none

在线命令演示源码:[Redis 基本命令、键(key)命令、数据类型概述.sql](https://gitee.com/wangmx1993/my-document/blob/master/redis/Redis 基本命令、键(key)命令、数据类型概述.sql)

Redis 数据类型概述

1、Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

2、这里暂时先做个概述,后续会详细说明。

3、在线命令演示源码:[Redis 基本命令、键(key)命令、数据类型概述.sql](https://gitee.com/wangmx1993/my-document/blob/master/redis/Redis 基本命令、键(key)命令、数据类型概述.sql)

Redis 字符串(String)

1、string 是 redis最基本的类型,一个key对应一个value。一个键最大能存储512MB。

2、string 类型是二进制安全的,可以包含任何数据,比如 jpg 图片或者序列化的对象 。

3、Redis 字符串(String)官网文档:https://www.redis.net.cn/order/3544.html

序号 命令 描述
1 set key value 设置指定 key 的值。key 存在时,覆盖其值。总是返回ok。设置的数字会自动转为字符串存储
2 get key 获取指定 key 的值。如果 key 不存在,则返回 (nil) 相当于 null。如果 key 的类型不是 string ,则报错。
3 getrange key start end range:范围、界限。返回 key 中字符串值的子字符。索引 [start ,end] 从 0开始。可以为负数,如 -1表示倒数第一位,-2 表示倒数第二位。
4 getset key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。key 不存在时返回为(nil),同时创建新值。
5 getbit key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 [mget key1 key2..] 获取所有(一个或多个)给定 key 的值。不存在的 key 返回 (nil)
7 setbit key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 setex key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 setnx key value 只有在 key 不存在时设置 key 的值。
10 setrange key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 strlen key 返回 key 所储存的字符串值的长度。不存在的 key 返回 0
12 [mset key value key value …] 同时设置一个或多个 key-value 对。key 存在时,覆盖其值。
13 [msetnx key value key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在才设置。
14 psetex key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 incr key 将 key 中储存的数字值增一。increment:ˈɪŋkrəmənt 增量、增加。如果不是数值,则报错。如果 key 不存在,则新建,incr 后,值为1。
16 incrby key increment 将 key 所储存的值加上给定的增量值(increment) 。如果不是数值,则报错。如果 key 不存在,则新建。
17 incrbyfloat key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。如果不是数值,则报错。如果 key 不存在,则新建。increment 不能是变量。
18 decr key 将 key 中储存的数字值减一。如果不是数值,则报错。如果 key 不存在,则新建,decr 后,值为 -1。如果 key 不存在,则新建。
19 decrby key decrement key 所储存的值减去给定的减量值(decrement) 。如果 key 不存在,则新建。increment
20 append key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在,则新建。value 不能是变量。

4、在线命令演示:[Redis 字符串(String)命令演示.sql](https://gitee.com/wangmx1993/my-document/blob/master/redis/Redis 字符串(String)命令演示.sql)

img

Redis 哈希(Hash)

1、Redis hash 是一个键值对集合,值可以看成一个 Map。

2、Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

3、每个 hash 可以存储 40多亿键值对。

hmset key filed value [filed2 value2 filed3 value3 …]:同时为 key 指定多个 filed 与 valuehgetall key:获取 key 中的所有 filed-value

4、Redis 哈希(Hash)官网文档:https://www.redis.net.cn/order/3564.html

序号 命令 描述
1 [hdel key field2 field2] 删除一个或多个哈希表字段。返回值成功删除的个数。key 或 field 不存在时会自动忽略。
2 hexists key field 查看哈希表 key 中,指定的字段是否存在。返回1表示有,返回0表示没有。key 不存在时也返回0.
3 hget key field 获取存储在哈希表中指定字段的值。key 或 field 不存在时,返回 (nil)。
4 hgetall key 获取在哈希表中指定 key 的所有字段和值
5 hincrby key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。field 必须是数值,否则报错。key 不存在时会自动新建。field 不存在时也会自动新建。
6 hincrbyfloat key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。field 必须是数值,否则报错。key 不存在时会自动新建。field 不存在时也会自动新建。
7 hkeys key 获取所有哈希表中的字段
8 hlen key 获取哈希表中字段的数量。key 不存在时返回0.
9 [hmget key field1 field2] 获取所有给定字段的值。key 或 field 不存在时,返回 (nil)。
10 [hmset key field1 value1 field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。field 存在时,覆盖 value。
11 hset key field value 将哈希表 key 中的字段 field 的值设为 value 。field 存在时,覆盖 value。
12 hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13 hvals key 获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

5、命令在线演示:[Redis 哈希(Hash)命令演示.sql](https://gitee.com/wangmx1993/my-document/blob/master/redis/Redis 哈希(Hash)命令演示.sql)

img

Redis 列表(List)

1、Redis 列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素导列表的头部(左边)或者尾部(右边)。

2、每个列表最多可存储 4294967295 个元素(约40多亿)

lpush key value1 value2 value3 …:在指定的 key 关联的 lsit 的头部插入所有的 value,如果 key 不存在,则会先创建一个与该 key 关联的空链表,之后向链表的头部插入数据,插入成功,返回插入的个数。lrange key start end:获取链表中 [start,end] 之间的元素值,从0开始计数。可以为负数,如 -1 表示链表尾部的元素,-2 表示倒数第二个。

3、Redis 列表(List)官网文档:https://www.redis.net.cn/order/3577.html

序号 命令 描述
1 [blpop key1 key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 [brpop key1 key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 brpoplpush source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 lindex key index 通过索引获取列表中的元素
5 linsert key BEFORE|AFTER pivot value 在 pivot 元素前/后插入 value 元素。成功时返回列表中元素的个数。key 不存在时返回0。pivot 不存在时返回-1。
6 llen key 获取列表长度。key 不存在时返回0;
7 lpop key 返回并弹出指定 key 关联的列表中的第一个元素(头部元素)。如果 key 不存在,则返回(nil)。弹出之后,列表中的此元素也就不存在了。
8 [lpush key value1 value2] 将一个或多个值插入到列表头部。如果 key 不存在,则先创建一个与该 key 关联的空列表,然后向列表的头部插入数据,返回插入成功的个数。因为有索引,所以可以插入重复的元素。返回 list 中的元素个数。
9 lpushx key value 将一个或多个值插入到已存在的列表头部
10 lrange key start stop 获取链表中 [start,end] 之间的元素值。索引从0开始,可以为负数,如 -1 表示倒数第一个元素,-2 表示倒数第二个元素…。end 可以超出列表的整个大小,此时多余的会自动忽略。
11 lrem key count value 删除 count 个值为 value 的元素。count > 0,则从头向尾遍历并删除 count 个值为 value 的元素,count < 0 ,则从尾向前遍历进行删除。count =0,则删除链表中所有的 value 元素。返回删除成功的个数。value 不存在时返回0。key 不存在时返回0。
12 lset key index value 设置列表中索引为 index 的元素值,0 表示首元素,-1表示尾元素。如果 index 不存在,则抛出异常。如果 key 不存在,也抛出异常。
13 ltrim key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 rpop key 移除并获取列表最后一个元素
15 rpoplpush source destination 将 resource 链表的尾部元素弹出并添加到 destination 链表的头部。成功时返回操作的元素。如果resource不存在,则返回(nil)。如果 destination 不存在,则自动会新建。
16 [rpush key value1 value2] 在列表尾部添加一个或多个值
17 rpushx key value 为已存在的列表的尾部添加值

rpoplpush 使用场景:

Redis 链表经常会被用于消息队列的服务,已完成多程序之间的消息交互。 假设一个应用程序正在执行 lpush 操作向链表头部插入新的元素,通常将这样的程序称之为”生产者(Producer)”, 而另一个应用程序正在执行 rpop 操作从链表的尾部取出元素,通常称之为”消费者(Consumer)”。 如果此时消费者程序取出消息后突然崩溃了,由于该消息已经被取出且没有被正常处理,那么就认为此消息已经丢失,由此可能导致业务数据丢失。 然而通过 rpoplpush 命令,消费者程序在主消息队列中取出消息之后再将其插入到备份队列中,直到消费者程序完成正常的处理后,再将该消息从备份列表中删除。 同时还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它消费者程序继续处理。

img

Redis 集合(Set)

1、Redis 的 Set 是 string 类型的无序集合。和 java 一样,集合中不会有重复的元素。

2、集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

3、每个集合中最大的成员数为 4294967295(40多亿个成员)。

sadd key value1 value2 …:向集合 key 中添加元素,key 不存在时会自动新建,value 存在时,后一次的会被忽略。smembers key:获取集合 key 中的所有元素。

4、Redis 集合(Set)官网文档:https://www.redis.net.cn/order/3594.html

序号 命令 描述
1 [sadd key member1 member2] 向集合添加一个或多个成员。如果 value 已经存在,则不会再添加。返回插入成功的个数。
2 scard key 获取集合的成员数。key 不存在时,返回0。
3 [sdiff key1 key2] 返回给定所有集合的差集。求 key1 与 key2 key3 …的差集,即 key1 中有,但 key2 key3 …都没有的元素。
4 [sdiffstore destination key1 key2] 将 key1 集合与其它集合的差集放入到 destination 集合中。如果 destination 已经存在且有值,则会被全部清除,不存在时会新建。
5 [sinter key1 key2] 返回给定所有集合的交集。求 key1 与 key2 key3 …集合的交集。
6 [sinterstore destination key1 key2] 将 key1 与其它集合的交集存放到 destination 集合中。如果 destination 集合已经有值,则会先被清理。
7 sismember key member 判断 member 元素是否是集合 key 的成员。返回1表示存在,返回0表示不存在。key 不存在时也返回0。
8 smembers key 返回集合中的所有成员
9 smove source destination member 将 member 元素从 source 集合移动到 destination 集合
10 spop key 移除并返回集合中的一个随机元素
11 [srandmember key count] 返回集合中一个或多个随机数。key 不存在时返回(nil)
12 [srem key member1 member2] 移除集合中一个或多个成员。返回成功删除的个数。 当然也可以使用 del key 直接删除整个集合。
13 [sunion key1 key2] 返回所有给定集合的并集。求 key1 与集合 key2 key3 …的并集。
14 [sunionstore destination key1 key2] 所有给定集合的并集存储在 destination 集合中。将并集结果存放到 destination 集合中。如果 destination 已经有值,则会被清除。
15 [sscan key cursor MATCH pattern] [COUNT count] 迭代集合中的元素

img

img

Redis 有序集合(sorted set)

1、Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。

2、不同的是每个元素都会关联一个 double 类型的分数,redis 正是通过分数来为集合中的成员进行从小到大的排序。

3、zset 的成员是唯一的,但分数(score)却可以重复。

zadd key score1 member1 score2 member2 …:添加元素到集合,元素在集合中存在则更新对应 score:zrangebyscore key min max :返回分数在 [mix,max]之间的成员,并按照分数由低到高排序。

4、Redis 有序集合(sorted set)官网文档:https://www.redis.net.cn/order/3609.html


文章作者: wumu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wumu !
  目录