Redis的基本数据类型及常用命令

Redis通用命令

KEYS命令用于查找所有匹配给定模式 pattern 的 key 。生产环境下不建议使用KEYS命令,会影响效率。

匹配规则:

  • h?llo 匹配 hello, hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello and hallo, 不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, ... 不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo
  • 使用 \ 转义你想匹配的特殊字符。

通过KEYS命令返回的结果为数组。下面是Redis中keys命令的简单使用

# 创建一些 key 并赋值
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
# 查找含有 name 的 key
redis> KEYS *name*
1) "firstname"
2) "lastname"
# 查找以 a 为开头长度为 3 的 key
redis> KEYS a??
1) "age"
# redis 获取所有的 key 使用 *。
redis> KEYS *
1) "age"
2) "firstname"
3) "lastname"

DEL命令用于删除给定的一个或多个 key 。不存在的key会被忽略。

DEL语句返回值为被删除的数量,下面是del命令的简单使用

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> SET key3 "redis.com.cn"
"OK"
redis> DEL key1 key2 key3 key4
(integer) 3

EXISTS命令用于检查给定 key 是否存在。

从 Redis 3.0.3 起可以一次检查多个 key 是否存在。这种情况下,返回待检查 key 中存在的 key 的个数。

注意:如果相同的 key 在参数列表中出现了多次,它会被计算多次。所以,如果somekey存在, EXISTS somekey somekey 命令返回 2。

EXISTS命令基本语法如下:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

EXPIRE命令设置 key 的过期时间(seconds)。 设置的时间过期后,key 会被自动删除。

超时时间只能使用删除 key 或者覆盖 key 的命令清除,包括 DEL, SET, GETSET和所有的 *STORE 命令。 对于修改 key 中存储的值,而不是用新值替换旧值的命令,不会修改超时时间。例如,自增 key 中存储的值的 INCR, 向list中新增一个值 LPUSH, 或者修改 hash 域的值 HAST,这些都不会修改 key 的过期时间。

通过使用 PERSIST命令把 key 改回持久的 key,这样 key 的过期时间也可以被清除。

key使用 RENAME 改名后,过期时间被转移到新 key 上。

已经设置过期的key,可以调用 EXPIRE 重新设置。在这种情况下 key 的生存时间被更新为新值。

EXPIRE命令的返回值为两个整数1:设置成功,0:key不存在

EXPIRE 命令基本语法如下:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1

TTL命令以秒为单位返回 key 的剩余过期时间。用户客户端检查 key 还可以存在多久。

Redis 2.6 之前的版本如果 key 不存在或者 key 没有关联超时时间则返回 -1 。

Redis 2.8 起:

  • key 不存在返回 -2
  • key 存在但是没有关联超时时间返回 -1

PPTL命令返回以毫秒为单位的剩余超时时间。

该两种命令的返回值都是剩余超时秒数,失败返回负数如上。

Redis的数据类型

Redis中存在很多数据结构,常用的是以下五种:String,Hash,List,set,ScortSet

String字符串类型

根据字符串类型,又可以划分为三种:

  • string:普通字符串,比如说hello world
  • int:整数类型,可以进行自增,自减。比如说10
  • float:浮点类型,可以进行自增,自减。比如说10.1

不管是哪种类型,底层都是字节数组形式存储,只不过编码方式不同,对于纯数字的string类型,底层会采用二进制的方式存储,节省空间。字符串类型最大存储为512MB

常见命令如下

set key value

添加或修改指定的key值

get key

获取指定key值

mset key1 value1 key2 value2

批量添加多个String键值对

mget key1 key2

根据多个key获取多个value

incr key

让整型的key的值自增1

incrby key size

让整型的key的值自增并指定步长

incrbyfloat key size

让浮点型的key的值自增并指定步长

setnx key value

如果该key不存在,则添加,存在则不执行

setex key seconds value

添加键值对,并指定有效期

为了区分不同业务的存储地址,通常我们会拼接key,一般采用项目名:业务名:类型:id的格式


Hash类型

又叫散列,其value是一个无序字典,类似于Java种的HashMap结构。适合存储对象,因为可以对单个字段进行CURD,并且占用内存更少,如果采用String类型保存Java对象,需要进行序列化JSON形式的字符串,需要保存很多的{} ,: , "" 的符号,而Hash类型不需要保存这些多余的符号。

常用命令如下

hset key field value

将哈希表key中的字段field的值设置为value

hget key field

获取存储在哈希表中的指定字段

hmset key field1 value1 field2 value2

批量添加多个hash类型的key的field的值

hmget key field1 filed2

批量获取多个hash类型的key的field的值

hgetall key

获取在哈希表中指定key的所有字段和值

hdel key field

删除存储在哈希表中的指定字段

hkeys key

获取哈希表中的所有字段

hvals key

获取哈希表中的所有值

hincrby key field size

让一个hash类型的key的字段值自增并执行步长

hsetnx key field value

添加一个hash类型的key的field值,如果存在则不执行


List类型

Redis种的List类型与Java中的LinkedList类型,可以当作双向链表,既可以支持正向检索也可以支持反向检索。特征也与LinkedList类似

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常见命令如下

lpush key element[element2]

将一个或者多个值插入到列表头部

lpop key

移除并返回列表左侧第一个元素

rpush key element[element2]

将一个或多个值插入到列表尾部

rpop key

移除并返回列表右侧第一个元素

lrange key start end

获取列表指定范围元素

llen key

获取列表长度

brpop[blpop] key timeout

移除并获取列表的最后一个元素[列表第一个元素],如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止


Set类型

Redis的Set结构与Java中的HashSet类似,可以看作是一个value为null的HashMap。因为Set类型本身也是一个hash表,因此具备与HashSet类似的特征

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

常见命令

sadd key member1[member2]

向集合添加一个或多个元素

srem key member1 [member2]

移除集合中一个或多个元素

scard key

获取集合的元素个数

sismember key member

判断一个元素是否存在于Set

smembers key

返回集合中的所有元素

sinter key1[key2]

返回给定所有集合的交集

sunion key1 key2 [key3]

返回所有给定集合的并集

sdiff key1 key2 [key3]

返回给定所有集合的差集


ScortSet类型

Redis中的SortSet是一个可排序的Set集合,与Java中的TreeSet相似,但底层实现差别较大,TreeSet是基于红黑树实现,且需要自己编写排序逻辑,而ScoreSet是基于score属性对元素排序,底层实现是一个跳表加hash表。具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

常见命令如下

zadd key score1 member1[score2 member2]

向集合中添加一个或多个元素或者更新已经存在元素的分数

zrank[zrevrank] key member

获取集合中指定元素的排名[倒序排名]

zcard key

获取集合中的元素个数

zcount key min max

统计给定分数值之间的元素个数

zincrby key size member

集合指定的元素的分数自增,并指定增量

zrange key start end[withscores]

通过索引区间返回集合中指定排名范围的元素。如果添加了withscore连同分数一起展示

zrangebyscore key min max

通过score排序后,获取指定分数范围内的元素

zrem key member[member]

移除集合中的一个或多个元素

zdiff、zinter、zunion

求差集、交集、并集

相关推荐

  1. Redis基本数据类型命令

    2023-12-05 18:48:08       35 阅读
  2. Redis基本命令数据类型

    2023-12-05 18:48:08       34 阅读
  3. Redis研学-五种基本类型命令

    2023-12-05 18:48:08       39 阅读
  4. Redis五种数据类型命令示例

    2023-12-05 18:48:08       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 18:48:08       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 18:48:08       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 18:48:08       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 18:48:08       18 阅读

热门阅读

  1. kotlin中sealed语句的使用

    2023-12-05 18:48:08       34 阅读
  2. ml_collections库介绍

    2023-12-05 18:48:08       39 阅读
  3. 【数据库】MSSQL 注入入门级的讲解

    2023-12-05 18:48:08       31 阅读
  4. word、excel文件转PDF(documents4j方式,简单)

    2023-12-05 18:48:08       38 阅读
  5. PyQt pdf格式保存

    2023-12-05 18:48:08       38 阅读