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

Redis 的基本特性和 5 个常用数据结构[TOC] 1. 基本特性 速度快 基于 C 语言开发,源码短小精悍 数据存在内存中 单线程(高性能) 支持数据持久化,异步保存到磁盘 丰富的数据结构(key-value):string、list、…

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

[TOC]

1. 基本特性

  • 速度快

    • 基于 C 语言开发,源码短小精悍
    • 数据存在内存中
    • 单线程(高性能)
  • 支持数据持久化,异步保存到磁盘

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

  • 多语言客户端

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

  • 简单

    • 核心代码量小
    • 不依赖外部库
    • 单线程模型
  • 支持主从复制

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

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

<!– more –>

2. 常用数据结构

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

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

代码100分

子串

代码100分# 追加子串
# 返回追加成功的字符串长度
> 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

过期和删除

代码100分# 删除
> 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8031.html

(0)
上一篇 2023-03-08
下一篇 2023-03-09

相关推荐

  • mysql数据库异常怎样排查_使用数据库遇到的问题

    mysql数据库异常怎样排查_使用数据库遇到的问题近一个月处理历史数据问题时,居然连续遇到了2个MySQL BUG,分享给大家一下,也欢迎指正是否有问题。 BUG1: 数据库版本: MySQL5.7.25 – 28 操作系统: Centos 7.7(

    2023-03-14
    149
  • MySQL存储过程和游标[通俗易懂]

    MySQL存储过程和游标[通俗易懂]一、存储过程什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。什么是存储过程:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-S

    2023-01-24
    142
  • 使用PyCharm创建Python项目

    使用PyCharm创建Python项目Python是一种高级、面向对象的解释型编程语言。随着Python在学校、企业和社区的普及,这门语言变得越来越受欢迎。为了使Python程序员的编程生涯更容易,JetBrains公司为Python装上了一套强大的Python IDE,即PyCharm。在PyCharm中,可以轻松创建、调试搭建Python项目。

    2024-09-06
    24
  • 宇信科技_宇信科技股票代码

    宇信科技_宇信科技股票代码近日,腾讯云联手宇信科技,共同完成了信贷平台、数据中台、手机银行等核心金融业务的联合解决方案,以及双向适配认证、深度测试和优化工作,并已在某头部农商行、某头部城商行投产运行。未来,双方将在信贷系统和国

    2023-05-25
    159
  • Python Default Set:优雅、高效的数据结构实现

    Python Default Set:优雅、高效的数据结构实现Python的Set是一个非常有用且常用的数据结构,它是Python中的一种无序可变容器类型,用于存储不重复的元素。在使用Set时,我们无需关心元素的顺序,而只需要知道元素是否存在。Python的Set的底层数据结构采用的是哈希表实现,可以快速的进行元素的查询、插入和删除等操作。

    2024-01-16
    102
  • mysql自增主键_数据库自增序列

    mysql自增主键_数据库自增序列
    MySQL InnoDB 引擎底层数据结构是 B+ 树,所谓的索引其实就是一颗 B+ 树,一个表有多少个索引就会有多少颗 B+ 树,mysql 中的数据都是…

    2023-04-03
    162
  • 基于C语言的Python标识符识别器

    基于C语言的Python标识符识别器在Python代码开发中,标识符是非常重要的。它们是程序的基本构建模块,通常用作变量、函数、类、模块和方法名称等。因此,在代码分析和编译器开发中,识别Python标识符具有重要的意义。

    2024-03-18
    78
  • hadoop启动hdfs命令_hadoop源码怎么使用

    hadoop启动hdfs命令_hadoop源码怎么使用执行start-dfs.sh脚本后,集群是如何启动的? 本文阅读并注释了start-dfs脚本,以及namenode和datanode的启动主要流程流程源码。 阅读源码前准备 源码获取 拉取Apach

    2023-04-18
    166

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注