我在项目中使用Redis的几个场景

news2024/11/16 1:40:50

目录

缓存

会话存储

分布式锁

消息队列

位统计

计数器

排行榜


缓存

缓存的目的是为了提高系统响应速度、减少数据库等资源的压力,redis作为键值对形式的内存数

据库,可以提供非常快速的读取速度,使得它成为存储热点数据或频繁访问数据的理想选择。

在实际项目使用中我们通常会先查询缓存,如果存在则直接返回数据,如果不存在则查询数据库,

然后插入缓存;如果是更新数据则先删除数据库再删除缓存。在高并发中需要考虑延迟双删。

会话存储

使用Redis来存储会话(Session)数据,可以实现在无状态的服务器之间共享用户相关的状态数据

数据。通常我们会使用redis集群来做会话存储,以避免单个服务故障导致用户无法登录。

用户通过浏览器登录Web Server的时候,Web Server生成会话ID(SessionID),这里一方面存储到Redis,另一方面将会话ID返回给浏览器(如Cookie,Token等)。当用户再次发生请求时,浏览器则携带会话ID,Web Server根据会话ID到Redis中查询相关信息,进行登录权限等验证。

分布式锁

在分布式、微服务等系统中,由于部署了多个服务节点,必然存在着多个节点使用同一个资源的情况,此时需要使用分布式锁来协调资源的分配,基于Redis使用分布式锁,相对于其他方式数据库分布式锁、Zookeeper分布式锁等有着明显的性能优势。

这里主要是用Redis的原子操作命令:SETNX,该命令仅允许key不存在的时候才能设置key。

SETNX key value
将 key 的值设为 value ,当且仅当key不存在。
若给定的 key 已经存在,则 SETNX 不做任何动作。

实际项目中推荐使用Redisson。

消息队列

对于一些简单的项目,对数据一致性不太高的情况下,也可以通过redis的Pub/Sub来实现。发布/

订阅(Pub/Sub)是redis的一种通信机制,将数据推到信息管道中,其他客户端可通过订阅这

些管道来获取推送信息,用于消息的传输。

常用命令:

SUBSCRIBE channel # 订阅频道
unsubscribe channel # 取消订阅
PUBLISH channel "Hello Wrold" # 发布频道消息

缺点:

redis无法对消息持久化存储,因此当出现异常时容易丢失消息
订阅者消费很慢的情况下,不断积压的消息会使redis输出缓冲区的体积变得越来越大,这可能使得redis本身的速度变慢,甚至直接崩溃

位统计

Redis提供了一套位操作命令:setbit、getbit、bitcount。作为节省空间的利器,可以轻松存储海量

数据。设想需要存储1亿用户是否登录,若使用mysql等关系型数据库,数据量远超其存储极限,

这里使用Redis位操作。设定一个超长数组,只能存储0和1,每个用户对应一个下标,默认0表示

未登录,当用户登录时设置为1,则1亿用户占用的空间不到12M。

SETBIT bit 10086 1  #把第10086个位置设置为

GETBIT bit 10086    #获取第10086个位置的值  看是0还是1

计数器

利用INCRBY命令可以统计网站的访问数量、全局ID等。

incrby userid 10000

使用该命令如果 key 不存在,那么key的值会先被初始化为0,然后再执行incrby命令。单线程加

上原子性确保了数据的唯一性。

排行榜

ZADD和ZRANGE提供了一套排序集合(Sorted Sets)。例:

# 首先使用ZADD添加集合
ZADD rank:score 100 "花"
ZADD rank:score 90 "草"
ZADD rank:score 80 "树木"

# 获取集合
ZRANGE rank:score 0 -1 WITHSCORES

得到集合:

"花"
100
"草"
90
"树木"
80

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

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

相关文章

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗?如果你曾经想知道如何在你的设备上利用NFC,那么你就来对地方了。 在本综合指南中,我们将引导你完成在iPhone 14上激活NFC的步骤,使你能够无缝连接其他设备,进行非接…

Linux------命令行参数

目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al ,可以查看当前文件夹下所有文件的信息,还有其他的如rm,touch等指令,都可以帮我们完成相应的操作。 其实运行这些…

c#cad 创建-直线(五)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是用于在AutoCAD中创建一条直线。首先获取当前活动文档和数据库的引用,然后创建一个编辑器对象用于提示用户输入。接下来,在一个事务中获取模型空间的块表记录,并定义直线的长度…

Python模拟点赞助手

背景 之前公司一直会安排各种学习任务,视频章节很多的视频,有些是技术的有些是政策相关的,如果没有按时完成学习任务会被通报。但是,这些学习内容不一定有帮助,所以大家就养成了刷课的习惯,也就是点开视频…

网络协议与攻击模拟_15FTP协议

了解FTP协议 在Windows操作系统上使用serv-U软件搭建FTP服务 分析FTP流量 一、FTP协议 1、FTP概念 FTP(文件传输协议)由两部分组成:客户端/服务端(C/S架构) 应用场景:企业内部存放公司文件、开发网站时利…

离线场景下任意文档的在线预览及原样格式翻译,不依赖其他厂商接口非侵入式一行js代码实现网站的翻译及国际化,可配置使用多种翻译语言

离线场景下任意文档的在线预览及原样格式翻译,不依赖其他厂商接口非侵入式一行js代码实现网站的翻译及国际化,可配置使用多种翻译语言。 要实现翻译需要解决以下3个主要问题: 1)from:内容本身的语言类型是什么&#xf…

Android Studio从零基础到APP上线(3)

第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…

社交分享效果统计:Xinstall助您精确追踪用户行为,优化推广策略

在移动互联网时代,社交分享已成为App推广的重要手段之一。通过微信、QQ等社交工具及主流浏览器的多渠道分享邀请,可以实现裂变式的推广效果,迅速扩大App的用户群体。然而,如何精确统计社交分享带来的安装量、注册量等关键数据&…

SQL常用语句大全

我们在进行开发工作时,对数据库的操作是必不可少的,熟练掌握SQL语句可以让我们对数据库的数据处理变得非常简单,所以学习SQL语句是非常有必要的,下面汇总了一些常用的SQL语句 SQL语句的类型 DDL(Data Definition Language)数据定…

Deepin基本环境查看(八)【系统安全:房、车、查房、查车】

Deepin基本环境查看(八)【系统安全:房、车、查房、查车】 - 相关文章目录1、概述2、想象中的... 现实中的...1)想象中的我2)梦幻中的我3)现实中的我 3 要房、要车、还是房车都要1)超级计算机2&a…

Yearning审核平台本地安装配置并结合内网穿透实现远程访问

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用…

【Linux系统化学习】自定义简易shell

目录 环境变量在进程替换中的继承 在当前进程中添加环境变量 putenv函数 环境变量被继承的原因 使用ecexle传递环境变量 传递自己的环境变量表 自定义简易的shell 获取主机、使用者、工作目录 获取命令 切割分解命令 创建子进程执行命令 内建命令的特殊处理 完整代…

CSS之盒子模型

盒子模型 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IE…

根据MySql建表语句创建Java实体类工具

点击下载《根据MySql建表语句创建Java实体类工具》 1. 前言 在软件开发领域&#xff0c;特别是在构建企业级应用时&#xff0c;数据模型与代码模型之间的映射是至关重要的。该软件是一款基于C#开发的高效工具&#xff0c;它将这一繁琐且容易出错的过程变得简洁且快速。此工具…

5.0 ZooKeeper 数据模型 znode 结构详解

数据模型 在 zookeeper 中&#xff0c;可以说 zookeeper 中的所有存储的数据是由 znode 组成的&#xff0c;节点也称为 znode&#xff0c;并以 key/value 形式存储数据。 整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。 进入 zookeeper 安装的 …

【wu-lazy-cloud-network】Java自动化内网穿透

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 功能 1.内网…

MRAM存内计算:现状及挑战

1 传统冯诺依曼瓶颈 随着人工智能、物联网、智能传感等应用的快速兴起&#xff0c;数据以爆发式的速度增长。海量数据的高效存储、迁移与处理成为当前信息领域的重大挑战。受限于经典的冯诺依曼计算架构存储与处理分离的特性&#xff0c;在面向大数据分析等应用场景中&#xff…

计算机设计大赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

MybatisPlus快速入门及常见设置

目录 一、快速入门 1.1 准备数据 1.2 创建SpringBoot工程 1.3 使用MP 1.4 获取Mapper进行测试 二、常用设置 2.1 设置表映射规则 2.1.1 单独设置 2.1.2 全局设置 2.2 设置主键生成策略 2.2.1 为什么会有雪花算法&#xff1f; 2.2.2 垂直分表 2.2.3 水平分表 2.…

用云手机打造tiktok账号需要注意些什么?

随着tiktok平台的火热&#xff0c;越来越多的商家开始尝试更高效的tiktok运营方法。其中&#xff0c;tiktok云手机作为一种新科技引起了很多人的注意&#xff0c;那么用云手机运营tiktok需要注意些什么&#xff1f;下文将对此进行详细解析。 1. 不是所有的云手机都适合做tiktok…