redis常用数据类型的场景,你真的用对了么?

2023-11-04

关注微信公众号“虾米聊吧”,每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流。

 

redis常用数据类型的场景,你真的用对了么?

 

redis常用数据类型包含string、hashmap、list、set、sorted set。

 

string类型

1) 单值缓存

set key value

这个没啥好说的

2) 对象缓存

set  user:1  value(json格式)

3)分布式锁

setnx product:10001  true //返回1代表获取锁成功

setnx product:10001  true //返回0代表获取锁失败

del product:100001       //执行业务完毕删除key释放锁

set product:100001       //设置过期时间(防止程序意外终止导致死锁)

4)redis 分布式session

5)计数器

文章浏览量计数(每浏览一次文章浏览量+1)

incr article:readcount:{文章id}

6)分布式全局id序列号

可以通过redis提前批量生产唯一序列号提升性能,比如高并发下的订单id序列

incrby orderId 100001        

 

hash类型

1) 对象存储

hset key field value

hset user {userId}  {user object}

 

hash类的数据结构,主要用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

 

典型场景:用户购物车

 

 

list类型

注:list是一个有序列表,使用得好是可以玩出很多花样的

使用场景1:栈、队列

 

使用场景2:微博大V粉丝列表,微博关注消息推送,订阅号关注消息推送等

 

key=大v  value=[a,b,c…]

可以用list存储一些列表型的数据结构,如:粉丝列表、文章评论列表之类。

另外可以通过lrange命令,从某个元素开始读取某段范围的数据,可以基于list实现分页查询,基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的效果,性能很高。

 

set类型

注:set集合是一个无序集合,自动去重,因此可以通过set做数据的全局去重。

使用场景1:微信抽奖小程序

srandmember key [count]:从集合中随机获取count名用户(不会删除)

spop key [count]:随机从集合中移除并返回这个被移除的元素

 

使用场景2:微信微博点赞、收藏、标签

使用场景3:关注模型

 

通过sdiff、sinter、sunion实现集合的交集(比如微博的共同关注列表)、并集差集(可能感兴趣的人)等

 

 

sorted set类型

这是一个排序的set,可以去重也可以排序,比如存储的时候设置一个分数,则可以自动根据分数排序,最大的特点就是有个分数可以通过自定义排序规则。

最常见的使用场景:排行榜

即将每个用户以及对应的分数写入,就可以获取top 10的用户,也可以获取到排行榜里的排名情况。

命令:zadd、zrevrange

 

图片摘自网络。

 

关注微信公众号“虾米聊吧”,获取更多知识资料干货~,一起交流,一起学习~,

一起打卡学习,一起交流进步吧!

微信扫描二维码,关注我的公众号

 

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

redis常用数据类型的场景,你真的用对了么? 的相关文章

  • WSL Redis 遇到系统尚未使用 systemd 作为 init 系统(PID 1)启动。无法操作[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试遵循本文中讨论的 Redis 安装过程article https www digitalocean com community
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

    我正在尝试为我的 Rails 应用程序构建聊天功能 我在用ActionController Live Puma Resque Redis为了这 所以基本上在这种情况下 redissubscribe方法正在后台运行 使用resque 到目前为
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 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中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道
  • 如何在Redis中只保存一个数据库?

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

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 集合成员的 TTL

    Redis 是否可以不为特定键而是为集合的成员设置 TTL 生存时间 我正在使用 Redis 文档提出的标签结构 数据是简单的键值对 标签是包含与每个标签对应的键的集合 例如 gt SETEX id id 1 100 Lorem ipsum

随机推荐

  • 服务器被ddos攻击了怎么处理

    服务器被DDOS攻击是很常见的事情 但对于网站管理员来说 这可能是一件非常麻烦的事情 那么 当服务器被DDOS攻击时 我们应该怎么处理呢 第一步 尽快确定服务器是否真的被DDOS攻击了 可以使用网站监控工具或者联系服务器提供商确认情况 第二
  • RSA 加密算法原理简述

    概述 本文旨在说明RSA加密算法的原理及实现 而其相关的数学部分的证明则不是本文内容 版权说明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 作者 Q WHai 发表日期 2016年2月29日 本文链接 http bl
  • MySQL5.7版本安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 MySQL Download MySQL Installer Archived Versions 选择要安装的版本 本篇文章选择的是5 7 31版本 点击Download下载 二 安装MySQL
  • 国内电脑行业数据浅析

    大家好 这里是小安说网控 信息时代 电脑成了办公标配 但受经济环境与疫情的双重影响 电脑行业整体情况不算理想 2022年1 8月 我国电脑行业累计产量29267 7万台 同比减少6 1 不仅产量 销量也有所下降 据Canalys发布的调研报
  • 多线程学习之线程生命周期

    线程生命周期中 线程状态切换关系如下图 线程各个状态直接切换说明 new Thread至Runnable状态 调用thread的start方法进入Runnable状态 但是现在线程并没有运行 相当于一个thread对象放到了内存中 等待调度
  • 实现数据导入+导入模式+导入案列

    导入模式 模式 参数 说明 操作角色 full full 导入整个数据库 imp full database schema schmas 导入用户模式中的数据和元数据 imp full database table tables 导入表和表
  • 三线调速风扇原理_风机盘管的工作原理和检修方法

    风机盘管是中央空调中典型的末端产品 主要是利用风扇组件作用 使空气与盘管中的冷水或热水进行热交换 并将降温或升温后的空气输出 风机盘管的封装形式有所不同 可以根据不同的需求选择不同的封装形式进行安装 比较常见的有吊顶暗装风机盘管 吊顶明装风
  • 2022mpsPTE岗位笔试题

    2022年9月完成了PTE岗位的笔试 并通过了 浅浅的还有一点印象 之前有朋友也想来 就放在这里 供需要的朋友看 前两个题是关于C语言的 语言不限 C 也可 一个是输出2到100偶数之和 主要就是调用for循环 一个是输入一个数 输出这个数
  • SpringCloud集成Nacos并使用

    摘要 今天分享下 SpringCloud 集成 Nacos 并使用 的一些基本知识 欢迎关注 欢迎阅读 总结系列 SpringCloudAlibaba 实战搭建 项目父模块 pom xml 配置
  • lgb(lightgbm)处理类别特征遇到的问题(泰坦尼克):

    1 lgb lightgbm 处理类别特征遇到的问题 ValueError DataFrame dtypes for data must be int float or bool Did not expect the data types
  • windows下使用vscode远程连接Linux服务器进行开发

    windows下使用vscode远程连接Linux服务器进行开发 一 安装远程开发插件Remote Development 1 在商店中搜索 Remote Development 并安装 2 选择SSH Targets 3 新建远程连接 4
  • mysql 数据类型

    1 整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT 分别使用 8 16 24 32 64位存储空间 存储范围是 2的 n 1 次方到2的 n 1 次方 1 其中n是存储空间位数 unsigned属性不允
  • 如何在uni-app正确使用web-view

    可以定义一个内部页面 就只放一个web view 然后在列表点击的时候 跳转到该内部页面 并且把需要打开的链接传递到该页面
  • vector::erase() vector中如何删除元素?

    vector erase 从指定容器删除指定位置的元素或某段范围内的元素 vector erase 方法有两种重载形式 如下 1 iterator erase iterator Where v1 erase v1 begin 删除v1中的第
  • MongDB解决Authentication Failed导致的不能连接问题

    MongoDB的安装 Step1 打开MongoDB产品下载页面https www mongodb com download center jmp nav community 选择Windows Server 2008 R2 64 bit
  • linux标准库unistd.h

    unistd h是unix std的意思 是POSIX标准定义的unix类系统定义符号常量的头文件 包含了许多UNIX系统服务的函数原型 unistd h在unix中类似于window中的windows h ifdef WIN32 incl
  • 微信小程序秀才成语接龙趣味答题小游戏带流量主无授权源码

    介绍 流量主带 横屏广告 视频广告 插屏广告 激励广告 趣味性很强 会推广运营肯定能赚一笔 这套源码也是淘宝买的 网盘下载地址 http kekewangLuo cc j27EjMGhsPL0 图片
  • 微信小程序 Spdier - OfferShow 反编译逆向(一)

    微信小程序 Spdier OfferShow 反编译逆向 一 文章目录 微信小程序 Spdier OfferShow 反编译逆向 一 前言 一 任务说明 1 尝试反编译分析出js code参数的生成方式 用来获取token 2 将小程序搜索
  • Flask 打包 PostgreSQL/PyTorch 的图像推荐系统在 Heroku 云平台上运行

    前文 推荐图像理论简述 PyTorch 推荐相似图像实现 图像推荐 Flask App 步骤 我已经为这个项目设定并满足了以下要求 该网络应用程序可在互联网上访问 该应用程序有一个带分页的图像库 仅加载页面的相关数据 图库和推荐的数据是从数
  • redis常用数据类型的场景,你真的用对了么?

    关注微信公众号 虾米聊吧 每天更新一篇技术文章 文章内容涵盖架构师成长必经之路应掌握的技术 一起学习 一起交流 redis常用数据类型的场景 你真的用对了么 redis常用数据类型包含string hashmap list set sort