Redis的基本特性和5个常用数据结构

database

[TOC]

1. 基本特性

  • 速度快

    • 基于 C 语言开发,源码短小精悍
    • 数据存在内存中
    • 单线程(高性能)

  • 支持数据持久化,异步保存到磁盘

  • 丰富的数据结构(key-value):string、list、hash、set、zset

  • 多语言客户端

  • 功能丰富:发布订阅;Lua 脚本;等

  • 简单

    • 核心代码量小
    • 不依赖外部库
    • 单线程模型

  • 支持主从复制

  • 原生高可用和分布式解决方案

    • Redis-Sentinel 高可用 v2.8+
    • Redis-Cluster 分布式 v3.0+

<!-- more -->

2. 常用数据结构

2.1. sting 字符串

2.1.1. 结构

  • key
  • value

2.1.2. 场景

  • 缓存
  • 计数器
  • 分布式锁
  • ……

2.1.3. 专有 API

# key 不管是否存在,都设置:存在则更新,不存在则新增

> set key1 value

# key 不存在才设置 <==> 新增

> setnx key value

# key 存在才设置 <==> 更新

> set key value xx

# 批量设置

> mset key value [key value ...]

# 批量获取

> mget key [ key ...]

# 获取字符串长度

> strlen key

子串

# 追加子串

# 返回追加成功的字符串长度

> append key value

# 获取子串

> getrange key start end

# 覆盖子串

> setrange key offset value

计数器

# 递增

# 不能超过 Long.Max 9223372036854775807

> incr key

> incrby key increment

# 递减

# 不能低于 Long.Min -9223372036854775808

> decr key

> decrby key decrement

过期和删除

# 删除

> del key [key ...]

# 设置过期时间(单位:秒),到期后自动删除

> expire key seconds

# 查看效期

> ttl key

2.2. hash 哈希

2.2.1. 结构

  • key

  • value

    • field 不能相同

    • value 可以相同

2.2.3. 专有 API

基本操作

# 为 key 增加一个键值对

# field 存在则修改,不存在,则新增

> hset key field value

# field 不存在才设置 <==> 新增

> hsetnx key field value

# 为 key 增加多个键值对

> hmset key field value [field value ...]

# 删除 key 中指定的键

> hdel key field [field ...]

# 递增

> hincrby key field increment

> hincrbyfloat key field increment

查询

# 获取 key 的一个键的值

> hget key field

# 获取 key 的多个键的值

> hmget key field [field ...]

# 获取 key 的所有 field 和 value

> hgetall key

# 返回所有 field

> hkeys key

# 返回所有 value

> hvals key

# 判断 hash 中的一个 field 是否存在

> hexists key field

# 判断 hash 中所有 field 的数量

> hlen key

2.3. list 列表

2.3.1. 特点

  • 有序
  • 可重复
  • 左右两端插入、弹出

2.3.2. 场景

  • Stack 栈 lpush + lpop

  • Queue 队列 lpush + rpop

  • Capped Collection 有限队列集合(固定数量) lpush + ltrim

  • Message Queue 消息队列 lpush + brpop

2.3.3. 专有 API

增(入)

# 从列表左边添加

> lpush key value [value ...]

# 从列表右边添加

> rpush key value [value ...]

# 在列表元素 pivot 的前面或后面插入一个新元素

> linsert key BEFORE|AFTER pivot newValue

删(出)

# 从列表左边弹出一个 value

> lpop key

# 从列表右边弹出一个 value

> rpop key

# 删除所有 value 相等的项

> lrem key count value

# count = 0 删除所有 value 相等的项

# count > 0 从左到右,删除最多 count 个 value 相等的项

# count < 0 从右到左,删除最多 Math.abs(count) 个 value 相等的项

# 按照索引范围修剪列表

> ltrim key start stop

# 修改指定下标的元素

> lset key index newValue

# 获取指定索引范围的所有项(包含 stop 的项)

> lrange key start stop

# 查询一个 key 下的所有项

> lrange key 0 -1

# 获取指定下标的项

> lindex key index

# 获取列表长度

> llen key

其它

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

# timeout 单位:秒

# lpop 的阻塞版本

> blpop key [key ...] timeout

# rpop 的阻塞版本

> brpop key [key ...] timeout

2.4. set 集合

2.4.1. 特点

  • 无序
  • 不可以重复
  • 集合之间的操作

2.4.2. 场景

  • Tagging 标签化 sadd

  • Random Item 随机元素 srandmemberspop

  • Social Graph 社交图谱 sadd + sinter

2.4.3. 专有 API

# 添加元素到集合中(重复的元素会被忽略)

> sadd key member [member ...]

# 从集合中删除元素

> srem key member [member ...]

# 计算集合中元素个数

> scard key

# 检查集合中是否存在指定的元素

> sismember key member

# 从集合中随机取出 count 个元素

# 不会破坏集合

> srandmember key [count]

#从集合中随机弹出 count 个元素

#会破坏集合(元素的顺序)

> spop key [count]

# 取出集合中所有元素

> smembers key

# 注意:1. 获取到的元素是无序的;2. 元素较多时会阻塞其它操作

# 替代:sscan ?

集合间

# 获取一个集合与其它集合的差集

> sdiff key [key ...]

# 获取一个集合与其它集合的交集

> sinter key [key ...]

# 获取一个集合与其它集合的并集

> sunion key [key ...]

2.5. zset 有序集合

2.5.1. 特点

  • 有序
  • 不可以重复
  • 元素多一个 score 用于排序

2.5.2. 场景

  • 排行榜

2.5.3. 专有 API

基本操作

# 添加元素

# score 可重复,member 不可以重复

> zadd key score member [score member ...]

# 删除元素

> zrem key member [member ...]

# 增加或减少元素的分数(score)

# increment 传负数表示减少

> zincrby key increment member

# 返回元素总个数

> zcard key

排名和分数

# 返回元素分数(score)

> zscore key member

# 获取元素的升序(score 从小到大)排名

> zrank key member

# 获取元素的降序(score 从大到小)排名

> zrevrank key member

# 获取指定分数间的成员数量

> zcount

根据范围获取元素

# 获取指定索引范围内的升序(score 从小到大)元素[分数]

# star 0 第一条;stop -1 最后一条

zrange key start stop [withscores]

# 获取指定索引范围内的降序(score 从大到小)元素[分数]

zrevrange key start stop [withscores]

# 返回指定分数(score)范围内的升序元素[分数]

> zrangebyscore key min max [withscores]

# 返回指定分数(score)范围内的降序元素[分数]

> zrevrangebyscore key max min [withscores]

根据范围移除元素

# 删除指定排名范围内的元素

> zremrangebyrank key start stop

# 删除指定分数范围内的元素

> zremrangebyscore key min max

以上是 Redis的基本特性和5个常用数据结构 的全部内容, 来源链接: utcz.com/z/534030.html

回到顶部