【Redis】数据结构篇

news/2024/5/2 6:10:19/文章来源:https://blog.csdn.net/liuwanqing233333/article/details/129131373

一. String 字符串

常见用途:缓存用户信息,将用户信息结构体使用 JSON 序列化为字符串,然后将序列化后的字符串给 Redis 来缓存

Redis 字符串是动态字符串,是可以修改的字符串 —— 实现类似 ArrayList ???

操作:

单个操作:
set 、 get 、 exists 、del、setex、setnx(不存在就创建)、incr、incrby
批量操作:
mset 、mget

二、list 链表

相当于 Java 语言中的 LinkedList,插入删除速度非常快,但是定位索引非常慢

在这里插入图片描述

底层使用 quicklist 快速链表结构,当数据量小时,分配一块连续内存(ziplist),数据量大时,才改成 quicklist。从而使得满足快速插入删除性能的同时,又不会出现太大的空间冗余。

当成异步队列使用,将任务序列化为字符串存入 list 中,再另开一个线程从列表中轮询数据进行处理

操作:
rpush , lpop,rpop,llen,lindex(得到某个位置的元素,可为负数,表示倒序拿,非常慢,慎用),ltrim(保留某个范围的元素)

三、hash (字典)

相当于 Java 语言中的 HashMap ,其是无序字典。与 Java 语言 rehash 方法不同,使用渐进式 rehash 策略 (在 rehash 的同时,保留新旧两个 hash 结构,查询时会同时查询两个hash 结构,然后在后续的定时任务中以及 hash 的子指令中,循序渐进地将旧 hash 的内容一点点迁移到新的 hash 结构中)。

hash 也可以用来存储用户信息,这样在获取时,可以做到部分获取,这种部分获取可以减少网络流量的浪费,但是 hash 结构存储的消耗更高,到底选择如何需要根据情况而定。

操作:
hset 、hgetall 、hlen、hget 、hmset、hincrby、incr

四、set(集合)

相当于 Java 语言中的 HashSet,因为其具有去重功能,适合存储活动中奖的用户 ID。

操作:
sadd , smembers , sismember , scard(获取长度) , spop

五、zset (有序列表)

Java 中 SortedSet 和 HashMap 的结合体,一方面可以保证 value 的唯一性,一方面为每个 value 赋予一个 score,代表这个 value 的排序权重,可以进行排序。其内部使用 跳跃列表 的数据结构实现。

在这里插入图片描述

zset 适合用来存储粉丝列表,这样可以对粉丝按照关注时间进行排序。

操作:
zadd、zrange(按照score得到某个范围的数据)、zrevrange(按照score得到某个范围的数据逆序输出)、zcard(含几个元素) 、zrank(某个元素排第几位) 、 zrangebyscore(按照排序输出范围)、zrem(删除某个元素)、 zscore(得到某个元素的 score)

容器型数据结构遵循的原则:

  1. create if not exists
    加入元素时,容器不存在就创建
  2. drop if no elements
    容器中没有元素了,就立刻删除容器

扩展: 存储用户对象时,使用 hash 还是 string

  1. 存储整个对象,其中JSON序列化过的字符串作为key

可以认为是“最佳实践”,因为每个对象都是全特性的key,JSON解析特别块,尤其是一次性查询很多个字段的时候。但是如果只查询一个字段,速度就显得比较慢了

  1. 在hash中存储每个对象的属性

也可以认为是最佳实践,每个对象都是一个全特性的key,不需要解析JSON字符串。但是如果要查询对象的全部字段会比较慢并且嵌套类型的对象无法轻易存储。

  1. 将对象转化为JSON字符串,用hash结构存储

HMSET users {id} ‘{“name”:“Fred”,“age”:25}’

这个方案可以仅用两个key,不需要很多key。但是没法对每个用户对象设置TTL(Time to Live,剩余生存时间),因为对象仅仅是hash中的一个字段,而不是全特性的key

这种方式对主key的命名空间污染更少,如果要存储很多对象,那么内存使用和方案1相当。当只需要查询一个字段时,会比方案2速度慢。

  1. 存储对象的每个属性作为单独的key

除非对象的属性需要专门设置TTL或者别的设置,否则不推荐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71866.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【自动化测试】自动化测试框架那些事儿

无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。在教学的过程中,同学们一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料,加上一些实践,算是对“框架”有了一些理解…

什么是生命周期?Activity生命周期的三种状态

什么是生命周期生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态、暂停状态和停止状态。接下来将针对Activity生命周…

CANopen概念总结、心得体会

NMT网络管理报文: NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文。常见报文说明: 0101---------------网络报文发送Nmt_Start_Node,让电机进入OP模式(此时还不会发送同步信号) setState(d, Operational)------------------开启…

STM32 SystemInit()函数学习总结

拿到程序后如何看系统时钟?User文件夹——system_stm32f4xx程序,先找systemcoreclock(系统时钟)但是这里这么多个系统时钟应该如何选择?点击魔法棒,然后点击C/C可以看到define的是F40_41XXX.USE这一款 ,对应着就找出了…

虹科新品 | 最高80W!用于大基板紫外曝光系统的高功率UVLED光源

光刻曝光是指利用紫外光源将胶片或其他透明物体上的图像信息转移到涂有光敏材料(光刻胶)表面以得到高精度和极细微图案的一种制作工艺,主要用于半导体生产、高精密集成电路、PCB板制造、MEMS等行业。光刻技术是半导体工业和集成电路是最为核心…

SAP FICO 理解业务范围的概念

业务范围 以前转载过几篇关于业务范围的文章: SAP Business Area 业务范围_SAP剑客的博客-CSDN博客_sap 业务范围 SAP FI 系列 002:业务范围派生_stone0823的博客-CSDN博客_sap 业务范围 http://blog.sina.com.cn/s/blog_3f2c03e30102w9yz.html 仍是…

修改redis的配置文件使得windows的图形界面客户端可以连接redis服务器

一、redis自带的客户端(了解,不方便)进入到redis安装目录的bin目录下指定主机和端口# ./redis-cli -h 127.0.0.1 -p 6379127.0.0.1:6379> exit 【退出】-h:redis服务器的ip地址-p:redis实例的端口号如果不指定主机和…

Dropout

目录一、Dropout出现的原因二、什么是Dropout?三、为什么Dropout解决过拟合?3.1 取平均的作用3.2 减少神经元间复杂的共适应关系四、实现Dropout—— pytorchexample 1example 2example 3设置dropout参数技巧一、Dropout出现的原因 在机器学习的模型中 如果模型的…

“终于懂了” 系列:组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入

ARouter系列文章: “终于懂了” 系列:组件化框架 ARouter 完全解析(一)原理全解 “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT—帮助类生成 “终于懂了” 系列:组件化框架…

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前,关闭电脑的防火墙,退出所有杀毒软件,防止刷单软件被误删桌面建立一个文件夹,下载下来的安装包放进去,解压到当前文件夹,使用过程中别打开防火墙、杀毒软件。打开软件后,…

计算机系统基础知识

计算机的基本组成 计算机组成逻辑图 计算机部件作用 一级部件作用 运算器:计算机的执行部件,受控制器控制,执行算术运算或逻辑运算控制器:决定计算机运行过程的自动化。不仅能保证程序指令的正确执行,还能处理异常事…

代谢组+转录组分析为腰果树果实发育成熟过程中代谢网络提供见解

文章标题:Metabolomic and transcriptomic analyses provide insights into metabolic networks during cashew fruit development and ripening 发表期刊:Food Chemistry 影响因子:9.231 作者单位:海南大学 百趣生物提供服务…

matplotlib学习笔记(持续更新中…)

目录 1. 安装,导入 2. figure,axes(图形,坐标图形) 2.1 figure对象 2.2 axes对象 2.3 代码演示 2.3 subplot() 方法 3. 图表的导出 3.1 savefig() 方法 3.2 代码演示 1. 安装,导入 pip install m…

关于数字化营销技术实现之【数据埋点】

1.如何实现数据埋点?小程序数据埋点是指在小程序中收集用户行为数据和业务数据的一种技术手段,以便对用户行为和业务运营进行分析和优化。下面是一些实现小程序数据埋点的方法:使用小程序统计分析工具:小程序平台提供了统计分析工…

大数据周会-本周学习内容总结0102

目录 01、ElasticSearch-学习总结 02、SpringbootElasticSearch构建博客检索系统 01、将MySQL数据同步到ES中 02、SpringBoot集成ES 03、本周学习计划 第一次周会 大数据总监、搜狐四年-中国搜索 【mapReduce】sql 大数据代表:Hadoop、spark、es、flink zookee…

Python字符串处理 -- 内附蓝桥题:门牌制作,卡片

字符串处理 ~~不定时更新🎃,上次更新:2023/02/20 🗡常用函数(方法) 1. s.count(str) --> 计算字符串 s 中有多少个 str 举个栗子🌰 s "1354111" print(s.count(1)) # 答案为…

Java-路径总和

每日一题 Java-路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。…

Pyspark基础入门4_RDD转换算子

Pyspark 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hi…

Head First设计模式---2.观察者模式

观察者(Observer)模式,是一种行为型设计模式,允许你定义一种订阅机制,可以在对象事件发生时通知更多个“观察”该对象的其他对象,类似于“订阅—通知” 问题 假如你有两种类型的对象,顾客和商…

将默认安装的 WSL2 迁移至指定目录

将默认安装的 WSL2 迁移至指定目录WSL2 默认安装在 C 盘下,系统盘空间有限,推荐更改安装目录。 1. 默认安装的 WSL2 目录 C:\Users\cheng\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 2. …