返回顶部
首页 > 资讯 > 数据库 >Redis 的基本特性和 5 个常用数据结构
  • 648
分享到

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

Redis的基本特性和5个常用数据结构 2019-02-26 15:02:56 648人浏览 绘本
摘要

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

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

[TOC]

1. 基本特性

  • 速度快

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

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

  • 多语言客户端

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

  • 简单

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

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

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

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
您可能感兴趣的文档:

--结束END--

本文标题: Redis 的基本特性和 5 个常用数据结构

本文链接: https://lsjlt.com/news/6526.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis 的基本特性和 5 个常用数据结构
    [TOC] 1. 基本特性 速度快 基于 C 语言开发,源码短小精悍 数据存在内存中 单线程(高性能) 支持数据持久化,异步保存到磁盘 丰富的数据结构(key-value):string、list、hash、set、zset...
    99+
    2019-02-26
    Redis 的基本特性和 5 个常用数据结构
  • 多维度深入分析Redis的5种基本数据结构
    目录一、简介二、string(字符串)1、string(字符串)相关介绍1.1 string(字符串)的内部结构1.2 string(字符串)的扩容2、string(字符串)的指令2...
    99+
    2024-04-02
  • redis数据类型及结构特性
    redis支持多种数据类型,每种类型具有独特结构:字符串:字节数组,可追加、修改和获取范围数据。列表:有序字节数组序列,可添加/弹出元素,获取/修改索引元素。哈希:键值对集合,可设置/获...
    99+
    2024-04-19
    redis 键值对
  • Redis系列(二):Redis的5种数据结构及其常用命令
    上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装。 本篇博客我们来讲解下Redis的5种数据结构...
    99+
    2017-12-08
    Redis系列(二):Redis的5种数据结构及其常用命令
  • Redis基本数据结构是什么
    这篇文章给大家分享的是有关Redis基本数据结构是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。Redis基础数据结构Redis有5种基本数据结构:String(字符串)、l...
    99+
    2024-04-02
  • Redis有哪些基本数据结构和操作
    这篇文章主要讲解了“Redis有哪些基本数据结构和操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis有哪些基本数据结构和操作”吧!基本结构 一个...
    99+
    2024-04-02
  • Redis中5种数据结构的使用场景
    这篇文章给大家分享的是有关Redis中5种数据结构的使用场景的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一、redis 数据结构使用场景原来看过 redisbook 这本书,对...
    99+
    2024-04-02
  • Java常见基本数据结构概览
            Java数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科。在Java数据结构中最常用的类型无外乎以下几种:M...
    99+
    2023-05-31
    java 数据结构 ava
  • Python实现基本线性数据结构
    数组 数组的设计 数组设计之初是在形式上依赖内存分配而成的,所以必须在使用前预先请求空间。这使得数组有以下特性: 1、请求空间以后大小固定,不能再改变(数据溢出问题); 2、在内存...
    99+
    2022-06-04
    数据结构 线性 Python
  • Redis中5种数据结构的使用场景介绍
    一、redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知道,在 re...
    99+
    2022-06-04
    种数 场景 结构
  • Redis之常用数据结构哈希表
    目录1.哈希冲突2.链式哈希3.rehash4.渐进式 rehash5.rehash 触发条件哈希表是一种保存键值对(key-value)的数据结构 哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。 怎么做到的呢...
    99+
    2023-04-11
    Redis常用数据结构-哈希表 数据结构之哈希表 Redis哈希表
  • Pandas常用的数据结构和常用的数据分析技术
    目录DataFrame的应用窗口计算相关性判定Index的应用范围索引分类索引多级索引日期时间索引分组聚合数据透视表数据合并数据清洗数据可视化Pandas是一个强大的数据处理库,它提...
    99+
    2023-05-18
    Pandas数据结构 Pandas数据分析
  • Redis常用数据结构哈希表是什么
    这篇文章主要介绍“Redis常用数据结构哈希表是什么”,在日常操作中,相信很多人在Redis常用数据结构哈希表是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis常用数据结构哈希表是什么”的疑惑有所...
    99+
    2023-07-06
  • 【数据结构——堆】堆的基本功能和堆排序
    文章目录 前言一、堆的定义1.大根堆2.小根堆3.父亲和孩子之间的关系 二、堆的操作和算法1.堆的初始化2.堆的插入向上调整算法向上调整算法时间复杂度 3. 堆的删除向下调整算法向下...
    99+
    2023-09-04
    数据结构 php 开发语言
  • WordPress数据库的基本构造及各表结构
    WordPress使用mysql数据库。作为一个开发者,我们有必要掌握WordPress数据库的基本构造,并在自己的插件或主题中使用他们。 截至WordPress3.0,WordPress一共有以下11个表。这里加上了默...
    99+
    2022-06-12
    WordPress 数据结构
  • oracle数据库的结构及基本操作
    这篇文章主要介绍“oracle数据库的结构及基本操作”,在日常操作中,相信很多人在oracle数据库的结构及基本操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle...
    99+
    2024-04-02
  • Redis之SDS数据结构的使用
    目录序言字符串char*字符串数组简单动态字符串SDS序言 Redis的几种基本数据结构有字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set),这些是最常见的,也能...
    99+
    2022-08-08
    RedisSDS数据结构 RedisSDS
  • EF使用数据注解特性创建表结构
    一、理解Code First及其约定和配置   传统设计应用的方式都是由下而上的,即我们习惯优先考虑数据库,然后使用这个以数据为中心的方法在数据之上构建应用程序。这种方法非常适合于数...
    99+
    2024-04-02
  • 数据库数据结构的基本概念是什么
    这篇文章主要介绍“数据库数据结构的基本概念是什么”,在日常操作中,相信很多人在数据库数据结构的基本概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库数据结构的基本概念是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-19
  • redis中的数据结构和编码详解
    redis中的数据结构和编码:     背景:         1>redis在内部使用red...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作