Redis 笔记一

news2024/11/26 16:42:51

概览

1.Redis核心数据存储结构

2.Redis底层String编码int&embstr&raw

3.Redis底层压缩列表&跳表&哈希表

4.Redis底层Zset实现压缩列表和跳表如何选择

5.基于Redis实现微博&抢红包&12306核心业务

辅助学习:Redis 教程 | 菜鸟教程

1.Redis为什么性能高?

单线程,没有切换线程的时间耗费

基于内存、多路复用

一破机制?涉及其内核级别的设置,多线程的设置,然后它性能就高。

Redis的性能高体现在命令执行时,采用全局Hash表,其存储的时间复杂度O(1),

        当发生哈希冲突时,采用rehash机制,使冲突的概率极小。

2.Redis核心数据结构

2.1.1字符串类型

特别的:SETNX(set if not exists)设置值时,若key值存在时,不做操作

2.1.2字符串类型应用场景

业务场景:文章阅读量

每当一个人阅读,就有一个+1操作。

在redis可以通过incr实现自增操作。

  • 一些分库分表设置的数据库,就不能用数据库自带的自增操作生成ID了,可以用redis实现自增操作。
  • 但是redis使用的是内存资源,比较宝贵,大数据量的话,不建议。可以采用一个批量自增的操作。取100个,存到java web里暂存,虽然java web程序挂了,会丢失,但是不影响,因为自增上限很大,不会不够用。
  • redis批量自增怎么做:INCRBY orderId 100

 注意: set zhuge 666 //int类型可自增

             set tuling 66a//string类型不可自增

             //原因在于:获得数据先尝试强转int,能转则int,不能转string

             object encoding xx//查看具体存储类型

2.2.1Hash类型

特别的应用:如一个对象类型:name:zhuge  balance:1888

可以将其处理为:双层map结构,把字段分开放在hash结构里,然后用一个hashset来存储。

和json相比,可以直接操作某个字段,处理起来更快、更好。

2.2.2Hash类型应用场景

应用场景:电商购物车

获得购物车所有商品,根据id, 对商品数量做添加、删除,展示商品总量

可以通过redis来操作

  • 通过hset cart:1001 10088 1  添加指定商品,只保留商品ID信息,通过ID来操作,更轻便,更快捷。
  • 已知商品ID, 获取商品全量信息可以用id在数据库总查询。

2.3.1list类型

关于队列,可以使用list来实现先进先出。FIFO

特别的: BRPOP其中B表示Blocking的意思,当队列没有数据时,会阻塞。适用于分布式结构。

2.3.2list类型的应用

应用场景:微博|微信消息

对于这种大量的消息来说,用oder By来排序,性能很低。可以用redis的list来实现,其本身就是按时间顺序排列的,其可以LRANGE  XX   0  4 通过下标来取一部分数,且支持负向索引

  • 发消息,根据ID插入对应博文的list里即可

2.4.1set类型

 注意:set里的数据是无序的

2.4.2set类型的应用

应用场景:微信小程序抽奖

将参与抽奖的人的ID放入Set,然后抽取指定数量,set本身是无序的,所以可以实现随机抽取。

有两种抽法:抽取放回

                     抽取不放回:可以设置多个奖励等级

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

实现:将用户ID维护到一个list里。

关注模型:共同关注|推荐关注

摘自:https://www.cnblogs.com/mike-mei/p/14663635.html

应用场景:共同关注

实现:将关注列表维护成set集合,通过交际|并集,获得指定集合数据。

2.5.1Zset类型

2.5.2Zset类型的应用

Zset是有序的结构,能支撑有序数据的展示。

3.Redis的数据结构的存储格式

 

Redis 的存储结构: key:value

其中key是string 类型,value的类型有:string、hash、list、set、Zset

接下来分别介绍各个数据类型的结构及应用:

数据类型存储结构
string简单动态字符串SDS
hash哈希表O(1)、压缩列表O(N)
list压缩列表O(N)、双向链表O(N)
set哈希表O(1)、整数数组O(N)
Zset(有序)压缩列表O(N)、跳表

跳表:

        其实,简单来说,跳表其实是一种多层的有序链表。跳表来源于链表,在链表的基础上结合了二分的思想进行改造,我们把改造之后的数据结构叫做跳表(Skip list)。

        我们知道:二分查找针对的有序数组,时间复杂度是o(logn)。如果是有序链表,查询和插入的的时间复杂度是o(n)。跳表就是链表的“二分查找”。redis的有序集合用的就是跳表算法。

        跳表中查询一个数据的时间复杂度就是 O(m*logn)

摘自:详解高级数据结构之 跳表 - 知乎

压缩列表和跳表:

压缩表的底层存储是是数组,查找快,但是增删慢,是一种以时间换空间的存储方式。

跳表最开始是由有序链表优化而来,增删快,查找慢。其保存冗余索引,但是不是B树、B+树,但是性能接近折半查找。是一种以空间换时间的存储方式。

什么时候用?什么样的场景用什么样的数据结构。

对于时间有要求用跳表;对于空间有要求用压缩数组;可以通过在配置文件配置redis.conf优先使用哪种存储结构。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟架桥:SD-WAN企业组网网络的智慧构筑

云桥通SD-WAN企业组网(软件定义广域网)代表着一项通过软件定义和虚拟化技术,将企业分支机构、数据中心和云服务等多种网络连接有机整合的创新解决方案。其核心框架涵盖了以下关键构成: 边缘设备: 在云桥通SD-WAN企业组…

小程序中使用上传图片,显示、删除、预览

一、功能介绍 需要哦用户点击加号上传图片&#xff0c;并展示所上传图片和能够删除和预览 二、功能实现 采用的uniapp&#xff0c;创建了一个view容器包裹加号图标和展示的图片。 内部展示图片超过9张时候&#xff0c;加号图片隐藏 <view class"img-list">/…

Django实现下载100G的超大CSV文件

关注我的公众号「DevOps724」&#xff0c;获取最新的内容分享&#xff0c;带你探索DevOps的无限可能&#xff01;分享最新的行业趋势、深入的技术分析和实用的工具&#xff0c;帮助你掌握自动化、云计算、持续集成和部署等核心概念。 在处理大数据集的时候&#xff0c;我们经常…

【前沿技术杂谈:智能对话的未来】深入比较ChatGPT与文心一言

【前沿技术杂谈&#xff1a;智能对话的未来】深入比较ChatGPT与文心一言 引言主体智能回复语言准确性知识库丰富度 深入分析&#xff1a;ChatGPT与文心一言的技术对比技术架构和算法数据处理和隐私用户界面和体验 应用场景分析未来展望技术进步的趋势潜在的挑战对社会的影响 结…

[计算机提升] 用户账户控制设置

4.11 用户账户控制设置 用户账户控制设置用来选择何时通知使用者关于计算机更改的消息&#xff0c;是一个比较有用的功能。有时候一些流氓软件在获得权限后可以在后台默认修改注册表或者下载或者安装软件&#xff0c;这个对用户而言&#xff0c;体验不是很好&#xff0c;而且更…

开发实践6_project

要求&#xff1a; ① 页面写入超链接&#xff0c;获取所有数据item&#xff0c;显示在另一个页面&#xff0c;1min内&#xff0c;即使数据有变化&#xff0c;页面内容不变&#xff0c;1min后点击超链接可获取最新信息&#xff1b; ② 使用middleware完成用户请求路径判断 &am…

web前端项目-贪吃蛇小游戏【附源码】

web前端项目-贪吃蛇小游戏 【贪吃蛇】是一款经典的小游戏&#xff0c;采用HTML、CSS和JavaScript技术进行开发&#xff0c;玩家通过控制一条蛇在地图上移动&#xff0c;蛇的目的是吃掉地图上的食物&#xff0c;并且让自己变得更长。游戏的核心玩法是控制蛇的移动方向和长度&am…

C++(12)——string

目录 1.insert: 1.1 string& insert (size_t pos, const string& str)&#xff1a; 1.2 string& insert (size_t pos, const char* s)&#xff1a; 1.3 string& insert (size_t pos, const char* s, size_t n)&#xff1a; 1.4 string& insert (…

【c++】栈(satck)和队列(queue)

目录 一、stack 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue 1.queue的介绍 2.queue的使用 3.queue的模拟实现 三、priority_queue 1.priority_queue的介绍 2.priority_queue的使用 一、stack 1.stack的介绍 &#xff08;1&#xff09;stack是一种容…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…

包含广告或宣传性质的内容或参考资料不对应,百度百科词条怎么改

想要修改百度百科词条&#xff0c;却发现在编辑百度百科词条时经常提示“包含广告或宣传性质的内容”&#xff0c;又或者经常遇到“参考资料不对应”的情况&#xff0c;我们该如何正确修改百度百科词条才能推广&#xff0c;洛希爱做百科网为大家分享。 修改百科百度百科词条提示…

基于SSM的校园闲置物品交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

nexus3 npm-hosted仓库迁移

迁移背景&#xff1a; 从nexus 3.33 升级到 nexus 3.64 过程中&#xff0c;私服 npm-hosted 无法上传。由于这个 npm-hosted 和 npm-proxy 放的同一个 blob存储&#xff0c;无法单独拆除去&#xff0c;所以采用迁移的方式 迁移思路&#xff1a; down下来 npm-hosted 仓库&am…

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

【征服redis8】Redis的AOF持久化

Redis 支持多种持久化方式来保证数据的可靠性和持久性。前面我们介绍了RDB方式。我们我们介绍第二种方式——AOF&#xff08;Append Only File&#xff09;机制是一种常用的持久化方式&#xff0c;它记录了所有对 Redis 数据库进行修改的命令&#xff0c;在 Redis 重启时可以使…

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中&#xff0c;前端通过以下三种方式来与后端进行交互&#x1f31f; ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对&#xff0c;一般用doGet方法进行交互 代码如下 …

读AI3.0笔记02_起源

1. 起源 1.1. 1955年&#xff0c;28岁的麦卡锡进入了达特茅斯学院的数学系 1.2. 该领域的正式确立可以追溯到1956年由一位名叫约翰麦卡锡的年轻数学家在达特茅斯学院举办的一场小型研讨会 1.2.1. 在1956年&#xff0c;即便是最先进的计算机&#xff0c;其速度也达不到现代智…

HarmonyOS —— buildMode 设置(对比 Android Build Varient)

前言 在安卓中 Build Variant 主要依赖模块&#xff08;module&#xff09;中 build.gradle 的 BuildType 和 ProductFlavor 提供的属性和方法&#xff0c;我们可以使用 Build Type 可以配置不同的构建方式、ProductFlavor 主要用来进行多渠道打包。 在鸿蒙中要做到同样像效果…

用CHAT分析高校体育智慧教学体系构建与探索研究现状

CHAT回复&#xff1a;现阶段&#xff0c;高校体育智慧教学体系的构建与探索研究还处于初级阶段&#xff0c;但全球数字化转型大潮的推动下&#xff0c;一些较为前沿的研究和实践已经开始出现&#xff1a; 1.教学平台的建设&#xff1a;很多高校已经开始尝试使用在线教育平台进行…

web蓝桥杯真题--9、水果拼盘

介绍 目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方案&#xff0c;本题可以使用 Flex 属性快速完成布局。 准备 开始答题前&#xff0c;需要先打开本题的项目代码文件夹&#xff0c;目录结构如下&#xff1a; ├── css │ └── style.css ├── im…