Redis 基本数据类型和常用命令

一、数据类型

Redis 5 支持以下多种数据类型:

  • 二进制安全的字符串。
  • Lists (列表):根据插入顺序排序的字符串元素的集合。
  • Sets (集):未排序的不重复的字符串元素的集合。
  • Sorted Sets (排序集):类似于集,但每个字符串元素与被称为分数的值相关,元素总是按其分数排序。
  • Hashes (散列) :由字段 (Field) 和值都是字符串组成的映射的集合。
  • Bit Arrays (也称 bitmaps 位图) :Bitmaps 本身不是一种数据结构, 实际上它就是字符串,但是它可以对字符串的位进行操作,所以在 Redis 官方的分类当中将其单独归为一类。
  • HyperLogLogs:实际类型为字符串类型 ,它是一种基数算法, 通过 HyperLogLog 可以利用极小的内存空间完成独立总数的统计。
  • Streams (流) :Stream是 Redis 5.0 引入的一种新数据类型,用于在生产者和消费者之间建立数据通道。

二、常用命令

2.1 字符串

作用命令格式参数或示例
设置值set key value [ex seconds][px milliseconds][nx|xx] setnx setexex seconds:为键设置秒级过期时间;
px milliseconds:为键设置毫秒级过期时间;
nx: 键不存在时才可以添加成功;
xx: 键存在时才可以修改成功。
获取值get key如果获取的键不存在 ,则返回 nil
批量设置mset key value [key value …]mset a 1 b 2 c 3 d 4
批量获取值mget key [key …]mget a b c d
计数incr key
decr key
incrby key increment(指定数值自增)
decrby key decrement(指定数值自减)
incrbyfloat key increment (浮点数自增)
值是整数时返回自增或自减后的结果;
值不是整数时返回错误;
键不存在时自动创建,并按照初始值为 0 进行自增或自减。
追加值append key value向字符串尾部追加值。
字符串长度strlen key获取字符串长度,中文占用三个字节
设置并返回原值getset key value
设置指定位置的字符串setrange key offeset value
获取部分字符串getrange key start end

2.3 哈希

作用格式参数或示例
设置值hset key field valuehset user:1 name tom
hset user:1 age 12
获取值hget key fieldhget user:1 name
删除 fieldhdel key field [field …]
计算 field 个数hlen key
批量设置或获取hmget key field [field]
hmset key field value [field value…]
hmset user:1 name mike age 12 city tianjin
hmget user:1 name city
判断 field 是否存在hexists key field
获取所有 fieldhkeys key
获取所有 valuehvals key
获取所有的 filed-valuehgetall key如果哈希元素个数比较多可能会阻塞Redis,此时可以使用 hscan 渐进式遍历
计数hincrby key field
hincrbyfloat key field

2.4 列表

作用格式参数或示例
左侧插入:lpush key value [value …]
右侧插入:rpush key value [value …]
某个指定元素前后插入:linsert key before|after pivot value
获取指定范围内的元素列表:lrange key start end
获取列表指定索引下标的元素:lindex key index
获取列表指定长度:llen key
lrange listkey 0 -1
从列表左侧弹出元素:lpop key
从列表右侧弹出元素:rpop key
删除指定元素:lrem key count value
截取列表:ltrim key start end
count>0:从左到右, 删除最多 count 个元素。
count<0:从右到左, 删除最多 -count 个元素。
count=0: 删除所有
修改指定下标的元素:lset key index newValue
阻塞操作blpop key [key …] timeout
brpop key [key …] timeout
key[key…]: 多个列表的键。 timeout: 阻塞时间|等待时间(单位秒)

2.5 集合

集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中的元素是无序的, 不允许有重复元素,不能通过下标获取元素。

作用格式参数或示例
添加元素sadd key element [element …]返回结果为添加成功的元素个数
删除元素srem key element [element …]返回结果为成功删除的元素个数
计算元素个数scard key
判断元素是否在集合中sismember key element
随机返回srandmember key [count]随机从集合返回指定个数元素,count 默认为1
从集合随机弹出元素spop keysrandmember 不会从集合中删除元素,spop 会
获取集合中所有元素smembers key可用 sscan 代替

集合间操作

作用格式
求多个集合的交集sinter key [key …]
求多个集合的并集suinon key [key …]
求多个集合的差集sdiff key [key …]
将交集、并集、差集的结果保存sinterstore destination key [key …]
suionstore destination key [key …]
sdiffstore destination key [key …]

2.6 有序集合

有序集合中的元素可以排序。它给每个元素设置一个分数(score) 作为排序的依据。

作用格式参数或示例
添加成员zadd key score member [score member …]nx: member 不存在时才可设置成功, 用于添加;
xx: member 存在时可以设置成功, 用于更新;
ch: 返回此次操作后, 有序集合内元素和分数发生变化的个数;
incr:对 score 做增加, 相当于下面的 zincrby。
计算成员个数zcard key
计算某个成员的分数zscore key member
计算某个成员的排名zrank key member zrevrank key memberzrank是从分数从低到高返回排名, zrevrank 反之。
删除成员zrem key member [member …]
增加成员分数zincrby key increment memberzincrby user:ranking 9 tom
返回指定排名范围的成员zrange key start end [withscores]
zrevrange key start end [withscores]
zrange是从低到高返回, zrevrange 反之。
返回指定分数范围内的成员zrangebyscore key min max [withscores][limit offset count]
zrevrangebyscore key max min [withscores][limit offset count]
其中 zrangebyscore 按照分数从低到高返回, zrevrangebyscore 反之;
[limit offset count] 选项用于限制输出的起始位置和个数;
min 和 max 代表最小和最大值,支持开闭区间, 也可以使用 -inf 和+inf 代表无限小和无限大。
删除指定排名内的升序元素zremrangerank key start end
删除指定分数范围的成员zremrangebyscore key min max

集合间操作

作用格式
交集zinterstore destination numkeys key [key …] [weights weight [weight …]] [aggregate sum|min|max]
并集zunionstore destination numkeys key [key …] [weights weight [weight …]] [aggregate sum|min|max]
  • destination: 交集计算的结果保存到这个键。
  • numkeys: 需要做交集计算键的个数。
  • key[key…]: 需要做交集计算的键。
  • weights weight[weight…]: 每个键的权重, 在做交集计算时, 每个键中的每个 member 会将自己分数乘以这个权重, 每个键的权重默认是1。
  • aggregate sum|min|max: 计算成员交集后, 分值可以按照sum(和)、min(最小值)、max(最大值)做汇总, 默认值是 sum 。

2.7 全局命令

  1. 查看所有键: keys *
  2. 查看键总数:dbsize
  3. 检查键是否存在:exists key
  4. 删除键:del key [key …]
  5. 键过期:expire key seconds ,使用 ttl 命令可以查看键剩余的过期时间, 它有以下三种返回值:
    • 大于等于0的整数: 键剩余的过期时间。
    • -1: 键未设置过期时间。
    • -2: 键不存在
  6. 查看键的数据类型:type key

2.8 键过期

可以使用以下命令完成设置键的过期时间:

  • expire key seconds: 键在 seconds 秒后过期;
  • expireat key timestamp: 键在秒级时间戳 timestamp 后过期;
  • pexpire key milliseconds: 键在 milliseconds 毫秒后过期;
  • pexpireat key milliseconds-timestamp:键在毫秒级时间戳 timestamp 后过期。

注意事项:

  • 如果 expire key 的键不存在, 返回结果为 0;
  • 如果设置过期时间为负值, 键会立即被删除, 此时等价于 del 命令;
  • persist key 命令可以将键的过期时间清除,使键变成永久的;
  • 需要特别注意对于字符串类型键, 执行 set 命令会清除掉已有的过期时间;
  • Redis 不支持对二级数据结构的内部元素设置过期时间, 例如不能对列表内的某个元素设置过期时间;
  • setex 命令是 set+expire 的组合, 它是一个原子操作。

2.9 渐进式键遍历

使用 keys 命令遍历键可能会带来阻塞的风险,因为 Redis 提供了渐进式键遍历命令 scan ,使用格式如下:

scan cursor [match pattern] [count number] 
  • cursor:游标,第一次遍历从 0 开始, 每次遍历完都会返回当前游标的值, 直到游标值为 0, 表示遍历结束。
  • match pattern:可选参数, 它的作用的是匹配特定模式的键;
  • count number:可选参数, 它的作用是表明每次要遍历的键个数, 默认值是 10。

2.10 数据库管理

1.切换数据库:select dbIndex

2.清除数据库:flushdb/flushall,flushdb只清除当前数据库, flushall会清除所有数据库。

更多文章,欢迎访问 [全栈工程师手册] ,GitHub 地址:https://github.com/heibaiying/Full-Stack-Notes

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值