Redis中的String类型与List类型个人理解

2023-10-29

String类型

          String类型是Redis的最基础类型,最大能存储512MB,其中存储值可以是最简单的字符串、复杂的 xml/json的字符串、二进制图像或者音频的字符串、以及是数字的字符串。
## String数据类型与结构

  1.  基本操作

       set 命令操作
             - set key value [ex | px | nx | xx] 
             - ex:设置key过期时间为 N 秒
             - px:设置key过期时间为 N 毫秒
             - nx:当键不存在时才对键进行设置操作
             - xx:当键存在时才对键进行设置操作
             
    setnx 命令
            当key不存在的时候才可以怼键进行设置
            若key已经存在,则不做任何操作
             
     setex 命令
             将key设置值,并且同时设置key有效时间为seconde秒钟
             如果key存在,则会覆盖掉原来的值
     
     psetx命令
             与setex命令差不多。但这是设置key有效时间为毫秒

    get 命令
            获取键的值。如果值不存在。则返回nil。如果值是非字符串。则返回一个错误


    getset 命令

             设置key的值为value,并返回被设置之前旧的值

     strlen 命令

             获取key的值的字符串长度

      append 命令

             当key存在时,在指定key字符串后面追加新的字符串。当key不存在时,则新增一个key,       值为追加字符串。执行成功后返回字符串长度。

      incr 命令

             当key不存在时,新增一个key并默认设置值为。当key存在时先初始化值为0后执行incr操作,则当前值自动 +1;值可以为负数,为负数时则执行减操作

        incrby 命令
                执行操作与incr一样。不同的地方在于,incrby可以自定义增加值的大小。。值为任意数字。当值不是数字时。则返回一个错误

        incrbyfloat 命令

                为key值加上浮点型数量

        decr 命令

                执行操作与incr差不多。不同的是,每执行一次,值减1;可负数。当存储的值不能解析为数字时,则返回一个错误

        decrby 命令

                将key值的数量减去1;当key不存在时,首先初始化值为0,在执行decrby操作,可负数。当执行key存储值为非数字时,则返回一个错误

        mset 命令

                可以同时为多个key设置值。mset key value [key value key value,...]

        msetnx 命令

                当所有key不存在时,则为所有给定键设置值。当给定值只有一个已经存在时,命令会拒绝所有给定值设置值操作。msetnx属于原子性操作。要么全部设置成功。要不就全部不做设置。不可能出现第三种情况。

        mget 命令

                返回给定一个key或多个key的值。当给定key里某个key不存在时。则

     2. string动态字符串结构

        SDS(简单动态字符串),是Redis的一种基本数据结构。主要用于存储字符串和整数。

struct sdshdr {
    #len代表buf数组中已使用的字符长度
    int len;
    #free代表buf数组中未使用的字符长度
    int free;
    #buf是数组,注意末尾保存了一个空字符 ‘\0’
    char buf[];
};

共有5种类型的SDS:

1.Sdshdr5

2.Sdshdr8

3.Sdshdr16

4.Sdshdr32

5.Sdshdr64

我们可以再SDS种新增一个type字段来标识类型。具体可以向带翅膀的猫学习数据结构源码解析SDS


 String类型应用场景

  1. Session共享-Session分散管理

    1. ​​​​​​
  2. Session共享-Redis集中管理Session

    1. ​​​
  3. 计数器-商品浏览量
    1. String类型里的incr和decr命令的作用是将存储中的数字值加1或减1.这两个具有原子性,总能安全的进行加减操作。可以用作技术,一般用于评论数,点赞数,收藏数,分享数,销量,评价数等。
  4. 限速
    1. 很多应用登录时,处于返券考虑会让用户进行短信验证,从而确认是否本人操作。但是为了短信接口不被频繁访问,会限制用户一定时间内的访问次数。

List类型

        list是可以存储多列有序的字符串,按照插入顺序排序,它可以在列表的头部添加数据,可以从列表的尾部添加数据。也可以从头部进行取数据。甚至可以从尾部进行取数据。一个列表对多可以包含 \small 2^{32}- 1 个元素

List数据类型与结构

List类型结构实现主要依据是什么?

        1.链表

                

        2.压缩列表

                压缩列表的构成

Zlbytes:压缩列表占用的内存字节数

Zltail:压缩列表尾节点距离起始地址又多少字节

Zllen:压缩列表字节点数

entryX:压缩列表节点

Zlend:压缩列表末端

                压缩列表节点的构成

Pervious_entry_length:压缩列表前一个节点的长度

Encoding:当前节点的值类型与长度

Content:当前节点值

                 压缩列表的遍历(表尾到表头)

 

List类型应用场景

1.秒杀抢购

        需要解决问题:

        1.商品超卖

        2.同时抢购产生高并发

        3.恶意请求

2.排行榜

        商品每日销量,学生月考排名,主播年终排名等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis中的String类型与List类型个人理解 的相关文章

  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • Laravel 异常队列最大尝试次数超出

    我创建了一个应用程序来向多个用户发送电子邮件 但在处理大量收件人时遇到问题 该错误出现在failed jobs table Illuminate Queue MaxAttemptsExceededException App Jobs ESe
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • 检查 Redis 列表中是否已存在某个值

    我想知道是否有办法检查 redis 列表中是否已存在某个键 我无法使用集合 因为我不想强制唯一性 但我确实希望能够检查字符串是否确实存在 Thanks 您的选择如下 Using LREM如果发现则更换它 维护一个单独的SET与您的LIST
  • memcache、redis 和 ehcache 作为分布式缓存框架的比较 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要做出的决定之一是在我的系统中使用什么缓存框架 有这么多可供选择 我目前正在研究 redis ehcache 和 memcached
  • 为什么Redis SET性能优于GET?

    根据Redis基准 http redis io topics benchmarkss Redis 可以执行 100 000 SET 操作 秒和 80 000 GET 操作 秒 Redis 是一种内存数据库 这似乎令人惊讶 因为通常人们会认为
  • 如何让 Redis 在 Heroku 上启动?

    我已经添加了RedistogoHeroku 上的 nano 插件 我已经在控制台中成功测试了它 但是 当我的应用程序尝试连接 Redis 时 出现以下错误 Heroku 日志文件 2011 10 12T08 19 50 00 00 app

随机推荐

  • golang怎么让string转int64

    在 Go 语言中 可以使用内置函数 strconv ParseInt 将字符串转为 int64 类型 具体用法如下 s 123456 i err strconv ParseInt s 10 64 if err nil 可能字符串 s 不是合
  • 剑指Offer - 面试题12:矩阵中的路径

    题目 请设计一个函数 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一格开始 每一步可以在矩阵总向左 右 上 下移动一格 如果一条路径经过了矩阵的某一格 那么该路径不能再次进入该格子 如 在下面的3 4的
  • 增量式PID vs 位置式PID: 选择最佳的PID控制策略

    增量式PID和位置式PID是两种常见的PID控制器实现方法 它们之间的区别主要在于反馈信号的处理方式和输出计算方式 反馈信号处理方式 增量式PID 增量式PID控制器使用系统输出值与前一时刻的输出值之差作为反馈信号 它将当前的误差值与前一时
  • 第五篇 如何调用驱动接口,完成互操作

    1 如何调用驱动功能 1 编写调用驱动的应用程序 1 1 定义驱动设备接口 以及调用接口的控制码 例如 DEFINE GUID GUID DEVINTERFACE SampleDriver 0xc459a9ec 0xb463 0x4838
  • Keras标准的模型训练、验证以及评估测试

    from keras models import Model Sequential from keras layers import Input Conv2D GlobalAveragePooling2D Dropout Dense Fla
  • 车祸现场~线上突然宕机,一条订单消息丢失了...

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 写在前面 之前写过一篇文章 RabbitMQ是如何收发消息的 通俗易懂 我们用一个简单易懂的电商场景给大家引入说明了一个消息中间件的使用场景 同时 我们还基于Ra
  • idea项目中的idea文件如何隐藏,以及不小心隐藏之后如何显示idea文件夹

    由于我们写项目时 发现了idea文件夹有时需要隐藏 或者隐藏后无法显示 接下来我就告诉你们 打开file settings editor gt file types 选择 gitignore 再那一栏的后面输入 idea 点击应用 点击ok
  • NoSQL 概念

    http www infoq com cn news 2011 01 nosql why 写道
  • shell中的变量

    变量 shell中预设的变量都是大写的 变量就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据 可以使用echo命令显示变量的值 echo PWD echo PATH 另外可以使用env命令列出全部系统预设的系统环境变量 不同登
  • 华为云云耀云服务器L实例评测|深度体验云耀云服务器购买和Ubuntu环境性能压力评测

    文章目录 步骤一 云耀云服务器L实例配置选型 步骤二 购买云耀云服务器L实例 购买关键须知 购买流程体验 步骤三 轻松上手远程登录云耀云服务器L实例 步骤四 对云耀云服务器L实例进行压力测试 第一项测试 CPU压力测试 第三项测试 云耀云服
  • redis根据指定端口号方式访问redis服务端!

    以默认的方式进入 端口号 6379 指定端口号进入客户端 端口号 6378 此服务器安装了两个redis服务端 害老子去一个没存数据的redis服务器里刷缓存
  • PandoraBox版本及已安装软件包

    主机名 PandoraBox 7FBB 型号 Netgear R6220 固件版本 PandoraBox 19 02 2019 02 01 git 93f2639a7 LuCI Master git 19 026 77036 498ca21
  • ThinkPHP实现凯撒密码加密和解密

    ThinkPHP实现凯撒密码加密和解密 在密码学中 恺撒密码 英语 Caesar cipher 或称恺撒加密 恺撒变换 变换加密 是一种最简单且最广为人知的加密技术 它是一种替换加密的技术 明文中的所有字母都在字母表上向后 或向前 按照一个
  • CSS 类选择器的特殊使用-多类名

    title CSS 类选择器的特殊使用 多类名 CSS 类选择器的特殊使用 多类名概念 一个标签有多个名字 多类名的使用方式 示例代码
  • 在NW.js里面使用node-printer

    0 写在前面的一些提示 不要使用太高版本的 NW js 以及 Node js 因为 node printer 会有兼容性问题 目前笔者测试到 node printer 最高只能在 0 43 x 版本以及低于这个版本的 NW js 里面正常运
  • 代码走查与代码审查区别

    代码走查 程序员和测试员组成审查小组 通过逻辑运行程序 第一步 小组成员提前阅读设计规格书 程序文本等相关文档 第二步 利用测试用例 使程序逻辑运行 记录程序的踪迹 发现 讨论 解决问题 代码审查 程序员和测试员组成审查小组 第一步 小组成
  • robot通过一个元素定位另一个元素

    xpath定位 xpath span text 文章评为精华 div div span text 去完成
  • 一些keil编程错误总结

    一 error c267 delay 10us requires ANSI style prototype问题 解决方法 1 未进行 模块化程序设计时 delay 10us该子函数要在主函数前 2 在进行 模块化程序设计时 这是由于 c文件
  • 区块链在非金融领域有哪些值得期待的应用

    引言 自己关注区块链好多年了 感觉大部分人都在炒币 或者所谓的搞金融 但是现在各国的审查都越来越严格 针对金融领域的审查尤其严格 在国内 基本上是禁止区块链应用有任何的发币行为的 我个人也是觉得金融领域的监管太多 反而不容易落地 这篇文章来
  • Redis中的String类型与List类型个人理解

    String类型 String类型是Redis的最基础类型 最大能存储512MB 其中存储值可以是最简单的字符串 复杂的 xml json的字符串 二进制图像或者音频的字符串 以及是数字的字符串 String数据类型与结构 基本操作 set