Redis 的常见使用场景

01 缓存

 作为 Key-Value 形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数据非常简单,只需要通过 string 类型将序列化后的对象存起来即可,不过也有一些需要注意的地方:

· 必须保证不同对象的 key 不会重复,并且使 key 尽量短,一般使用类名(表名)加主键拼接而成。

· 选择一个优秀的序列化方式也很重要,目的是提高序列化的效率和减少内存占用。

· 缓存内容与数据库的一致性,这里一般有两种做法:

1.只在数据库查询后将对象放入缓存,如果对象发生了修改或删除操作,直接清除对应缓存(或设为过期);

2.在数据库新增和查询后将对象放入缓存,修改后更新缓存,删除后清除对应缓存(或设为过期)。

02 数据共享分布式

因为 Redis 是分布式的独立服务,可以在多个应用之间共享。

比如:共享session

在开发后台的时候,需要使用session来保存用户信息,当我们后台服务器不止一台,而是扩展成多台的时候,则需要有个来存储共享session的地方,而redis可以实现session共享。

03 分布式锁

redis可以实现分布式锁,主要使用setnx这个api,如果存在则返回加锁失败,否则加锁成功,并可以设置过期时间。当程序执行完后,需要解锁。在解锁的时候,需要判断,解锁的线程与加锁的线程是同一个线程。所以判断与解锁需要是个原子操作。这个用到了lua脚本来实现。所以实现分布式锁主要有两点:

setnx,存在则加锁,否则返回失败;

使用lua脚本完成解锁操作。

04 消息队列

List是简单的字符串列表,可以从列表头部或尾部插入数据。使用的是压缩列表或者双向链表。常见命令是Left push ,Right pop,左进右出。

消息队列在存取消息时,必须要满足三个需求,分别是消息保序、处理重复的消息和保证消息可靠性。

消息保序,list本身就是有顺序的,可以用LPush和RPop左推右出,实现顺序有序,值得注意的是,在一直没有消息进来的情况,使用pop命令一直访问List会浪费CPU资源,可以使用Redis提供了 BRPOP 命令。BRPOP命令也称为阻塞式读取,客户端在没有读到队列数据时,自动阻塞,直到有新的数据写入队列,再开始读取新数据。

处理重复消息,redis 本身不会去控制存储数据的重复性,需要在客户端自行设计全局ID,消费者自己根据全局ID判断。

消息的可靠性,当消费者从List pop出一条消息,假如处理过程中异常或者系统停机,则redis 上的list已经取出来了,不能再重新消费。为了留存消息,List 类型提供了 BRPOPLPUSH 命令,这个命令的作用是让消费者程序从一个 List 中读取消息,同时,Redis 会把这个消息再插入到另一个 List(可以叫作备份 List)留存。

消息保序:使用 LPUSH + RPOP;

阻塞读取:使用 BRPOP;

重复消息处理:生产者自行实现全局唯一 ID;

消息的可靠性:使用 BRPOPLPUSH。

05 发红包

发红包需要确保在并发下,红包能只被一个人抢走。

做法:

将红包拆分成n份

使用redis list类型 存储红包,使用list 的pop 方法抢红包。

06 抽奖

Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。Set 类型除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。

存储某活动中中奖的用户名 ,Set 类型因为有去重功能,可以保证同一个用户不会中奖两次。

07 限流

int类型,incr方法

以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false。

08 计数器

int类型,incr方法

例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

服务器数据恢复-EqualLogic PS存储硬盘坏道导致存储不可用的数据恢复案例

服务器数据恢复环境: 一台DELL EqualLogic PS系列存储,存储中有一组由16块SAS硬盘组成的RAID5。上层是VMFS文件系统,存放虚拟机文件。存储上层分了4个卷。 服务器故障&检测: 存储上有2个硬盘指示灯显示黄色,磁盘出…

微服务架构之争:Quarkus VS Spring Boot

在容器时代(“Docker时代”),无论如何,Java仍然活着。Java在性能方面一直很有名,主要是因为代码和真实机器之间的抽象层,多平台的成本(一次编写,随处运行——还记得吗?&a…

【MySQL学习之基础篇】约束

文章目录 1. 概述2. 基础约束3. 外键约束3.1. 介绍3.2. 外键的添加3.3. 外键删除和更新行为 1. 概述 概念: 约束是作用于表中字段上的规则,用于限制存储在表中的数据。     目的: 保证数据库中数据的正确、有效性和完整性。 分类&#x…

路由器原理

目录 一.路由器 1.路由器的转发原理 2.路由器的工作原理 二.路由表 1.路由表的形成 2.路由表表头含义 直连: 非直连: 静态 静态路由的配置 负载均衡(浮动路由) 默认路由 动态 三.交换与路由对比 一.路由器 1.路由器…

Cockpit upload文件上传漏洞(CVE-2023-1313)

0x01 产品简介 Cockpit 是一个自托管、灵活且用户友好的无头内容平台,用于创建自定义数字体验。 0x02 漏洞概述 Cockpit assetsmanager/upload接口处存在文件上传漏洞,攻击者可通过该漏洞在服务器端任意上传代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x0…

C语言----文件操作(二)

在上一篇文章中我们简单介绍了在C语言中文件是什么以及文件的打开和关闭操作,在实际工作中,我们不仅仅是要打开和关闭文件,二是需要对文件进行增删改写。本文将详细介绍如果对文件进行安全读写。 一,以字符形式读写文件&#xff…

柔性数组(结构体成员)

目录 前言: 柔性数组: 给柔性数组分配空间: 调整柔性数组大小: 柔性数组的好处: 前言: 柔性数组?可能你从未听说,但是确实有这个概念。听名字,好像就是柔软的数…

git checkout进行更改分支

git clone https://gitee.com/yaleguo1/minit-learning-demo.git下载代码。 cd minit-learning-demo/进入目录里边。 ls -l看一下当前分支的内容。 git checkout geek_chapter02更改分支到geek_chapter02。 ls -l看一下目录里边的内容。

docker小白第四天

docker小白第一天 什么是镜像 1、是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就…

磁盘坏道扫描工具 Macrorit Disk Scanner v6.7.0 中文免费版 -供大家学习研究参考

非常方便实用的磁盘坏道修复软件。Wipe Bad Disk功能强大好用,通过特殊的算法来强制将硬盘的坏道删除清空格式化,从而拯救因产生坏道而不敢继续使用的硬盘!要注意的是经过这块软件清空的硬盘数据基本上是不能被恢复的,所以操作前请一定要备份…

Docker Swarm编排:构建简单集群

Docker Swarm 是 Docker 官方提供的容器编排工具,通过它可以轻松构建和管理多个 Docker 容器的集群。本文将深入探讨 Docker Swarm 的基础概念、构建集群的步骤,并提供更为丰富和实际的示例代码,帮助大家全面了解如何使用 Docker Swarm 搭建一…

Linux 内核 GPIO 用户空间接口

Linux GPIO架构 GPIO是通用输入/输出的缩写,是嵌入式Linux系统中最常用的外设之一。 在内部,Linux 内核对 GPIO 的访问方法可以参考如下内容 GPIO Driver Interface — The Linux Kernel documentation GPIO Descriptor Consumer Interface — The L…