在什么网站上做兼职靠谱吗/华为云速建站

在什么网站上做兼职靠谱吗,华为云速建站,网络广告营销典型案例,桂平网页设计redis是什么? 是一种以键值对形式存储的数据库,特点是基于内存存储,读写快,性能高,常用于缓存、消息队列等应用情境 redis的五种数据类型是什么? 分别是String、Hash、List、Set和Zset(操作命…

redis是什么?

是一种以键值对形式存储的数据库,特点是基于内存存储,读写快,性能高,常用于缓存、消息队列等应用情境

redis的五种数据类型是什么?

分别是String、Hash、List、Set和Zset(操作命令很多这里只写部分关键的,其他查一查即可)

①String类型



redis中最基本的数据结构,key是String类型,value可以存储字符串、整型或浮点数

SET <KEY> <VALUE>    //写入
GET <KEY>    //读取
②Hash类型 



在value部分提供了一个field作为value的键,因此一个Hash可以存储多个字段和对应的值,适合用来存储对象

HSET <KEY> <FIELD> <VALUE>    //写入
HGET <KEY> <FIELD>        //读取
③List类型

有序可重复,相当于LinkedList,可以从列表的两端进行插入或删除

LPUSH <KEY> <ELEMENT>    //从列表左边插入
LPOP <KEY>        //移除左侧第一个元素
右侧同理,用RPUSH和RPOP
④Set类型

无序不重复

SADD <KEY> <MEMBER>...     //添加一个或多个
SREM <KEY> <MEMBER>...     //删除一个或多个
SCARD <KEY>      //返回元素个数
⑤Zset类型

有序集合,每个元素都带有一个score属性,用score来排序

ZADD <KEY> <SCORE> <MEMBER>...     //添加一个或多个
ZREM <KEY> <MEMBER>...     //删除一个或多个
ZSCORE <KEY> <MEMBER>      //获取指定元素的score值

在Java中怎么使用redis?

我们会用RedisTemplate

使用方法:
①导入依赖

<!--Redis-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

②在application.yml中配置redis

spring:redis:host:127.0.0.1  # Redis服务器地址port:6379   # Redis服务器连接端口password:    # Redis服务器连接密码(默认为空)lettuce:pool:max-active:8  #最大连接max-idle:8  #最大空闲连接min-idle:0   #最小空闲连接max-wait:100  #连接等待时间

③在你要的文件中注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate

 ④代码实例

redisTemplate.opsForValue.set(key,value);   //存
String id = redisTemplate.opsForValue.get(key);   //取
redisTemplate.delete(key);    //删除

可以在存数据的时候设置超时时间,避免因为只存出现内存不足的情况(如果不引入超时删除,就会出现redis只存不删的情况,时间长了内存会爆)

redisTemplate.opsForValue.set(key,value,超时时间,超时单位);   //存

可以给已有的键值对设置过期时间

redisTemplate.expire(key,超时时间,超时单位);   

提示:key可以用 : 来分隔,这样可以清楚层级,比如 login:user:code

 

Redis作用


一、redis+session登录校验

二、缓存数据 


优点:降低后端负端,提高读写效率和性能,更好应对高并发
以前的项目中我们是直接访问数据库,众所周知mysql的性能很差,那我们就可以引入redis作为缓存,当用户发起请求时,我们可以先去redis看看有没有对应的数据,如果有我们就直接取用,不用访问数据库了;如果没有我们才去数据库取,同时把读取到的数据写入redis,方便下一次取用

但是会有一个问题:如果redis或者mysql其中一个地方的数据发生更改,没有通知另一个,就会出现redis中的数据和数据库中的数据不一致,也就是redis和数据库的缓存一致性问题

为了解决缓存一致性问题,我们可以使用缓存更新策略 

第一种是内存淘汰,就是redis中存太多了它会自动杀掉
第二种是超时剔除,就是前面的给缓存设置超时时间
第三种是主动更新,就是我们手动添加逻辑,一致性最好,但是也最麻烦
因此我们常常采用主动更新策略,里面又有三种

第一种是旁路缓存,也是最常用的方法:读操作先找缓存,没有再找数据库,然后把数据保存到缓存;写操作就是在更新数据库后删除缓存。这样操作相对最少出问题

第二种是读写穿透,将缓存和数据库整合成一个服务。调用者只需与缓存交互,读操作缓存未命中时,服务从数据库加载数据并写入缓存;写操作时,服务先更新缓存,再同步更新数据库,但是实现难一点,而且对数据库要求高

第三种是异步写回,调用者只操作缓存,然后缓存再异步更新到数据库中,有可能出现一致性问题

三、缓存穿透等问题

(1)缓存穿透

缓存穿透就是指用户请求的数据在缓存和数据库中都不存在(比如乱传一个id),那么因为缓存没有这个数据,每次请求都会打到数据库,然后数据库返回一个null;如果有人故意大量制造这样的请求,就会有大量的请求直接打到数据库,导致数据库崩溃,这就是缓存穿透问题

解决缓存穿透有主要两种方法:

缓存空对象,如果用户请求一个在缓存和数据库中都不存在的数据,那就缓存null值,当下一次再请求,就直接返回null。但我觉得没什么鸟用因为只要请求一直换他就要在redis一直新增缓存直接爆炸

布隆过滤 在请求到达缓存前,先用布隆过滤器进行判断,存在就放行,不存在就拒绝

其余方法有加强权限校验,设置限流等

(2)缓存雪崩

缓存雪崩是指同一时间大量的key失效或者redis直接宕机导致大量的请求直接打到数据库

解决方法:

① 给不同的key添加不同的TTL随机值
② 用redis集群 主从机制 哨兵检测 主挂了就换一个从上
③ 使用多级缓存
④ 做限流

(3)缓存击穿

缓存击穿是指某些被大量访问且缓存重建复杂的热点key失效了,导致大量的请求直接打到数据库

解决方法:

①互斥锁

当大量请求来到时,只让第一个到达的线程进行缓存的重建,此时其余请求会被卡住,直到这个缓存重建完成,优点是返回的数据是准确的,缺点是性能差
对于第一个线程:获得互斥锁,进行缓存重建
对于后面的线程:获取不到互斥锁,休眠,过段时间重试

②逻辑过期

热点key永不过期,但是要设置一个过期时间的字段(不是设置过期时间)。当请求到达时会根据过期时间的字段进行判断,如果过期了,那就用互斥锁,创建一个新的线程单独负责缓存的重建,而它和其余线程直接返回当前key的数据(也就是错误的旧数据),优点是线程无需等待性能好,缺点是数据一致性差
对于第一个线程:判断缓存是否过期,如果过期,获得互斥锁,新建一个进程进行缓存重建,自己先返回旧的数据
对于后面的线程:获取不到互斥锁,直接先返回旧的数据

提示:在获取到锁后最好再进行一次判断

(4)超卖问题

超卖问题就是比如有一个秒杀活动,此时大量的线程发起购买请求,线程a查到库存为1,线程b查到库存也为1,然后线程a调用请求会让库存 -1,而线程b不知道(因为查到的库存为1),所以也会让库存 -1,本来库存只有1,现在却触发了两次扣减库存,让库存为 -1,这就是超卖问题

解决方法:加锁

①悲观锁

悲观指认为线程安全问题一定会发生。因此在操作数据之前需要先获取锁,让这些线程串行执行,优点是不出错,缺点是性能差
synchronized、lock都属于悲观锁

②乐观锁

乐观指认为线程安全问题不一定发生,不加锁,只在数据进行更新操作时检查在此期间数据是否被更改
乐观锁的方法通常会给数据额外引入一个标识(比如版本号或者时间戳)来标记数据是否被更改
对于一个线程来说,去更新时发现如果数据已被更改就更新失败;否则更新成功

但是这些只在单一服务下好用,多集群就失效了,要用分布式锁

四、Redis分布式锁

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

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

相关文章

大语言模型学习--本地部署DeepSeek

本地部署一个DeepSeek大语言模型 研究学习一下。 本地快速部署大模型的一个工具 先根据操作系统版本下载Ollama客户端 1.Ollama安装 ollama是一个开源的大型语言模型&#xff08;LLM&#xff09;本地化部署与管理工具&#xff0c;旨在简化在本地计算机上运行和管理大语言模型…

【JavaEE】线程安全

【JavaEE】线程安全 一、引出线程安全二、引发线程安全的原因三、解决线程安全问题3.1 synchronized关键字&#xff08;解决修改操作不是原子的&#xff09;3.1.1 synchronized的特性3.1.1 synchronized的使用事例 3.2 volatile 关键字&#xff08;解决内存可见性&#xff09; …

Vue核心知识:动态路由实现完整方案

在Vue中实现动态路由&#xff0c;并结合后端接口和数据库表设计&#xff0c;是一个复杂的项目&#xff0c;需要多个技术栈和步骤的配合。以下将详细描述整个实现过程&#xff0c;包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…

基于SpringBoot的校园二手交易平台(源码+论文+部署教程)

运行环境 校园二手交易平台运行环境如下&#xff1a; • 前端&#xff1a;Vue • 后端&#xff1a;Java • IDE工具&#xff1a;IntelliJ IDEA&#xff08;可自行更换&#xff09; • 技术栈&#xff1a;SpringBoot Vue MySQL 主要功能 校园二手交易平台主要包含前台和…

iPhone 镜像 连接错误

重置连接 defaults delete com.apple.ScreenContinuity打开 iPhone 镜像 参考 mac镜像iPhone无法连接报错个人经历的 iPhone 镜像 bug 与部分解决办法

Qt基础入门-详解

前言 qt之路正式开启 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44…

Unity 优化封装常用API和编辑器扩展工具包

资源名&#xff1a;WXTools 文章目录 MeshRenderEditorSpriteGroupToolWXEditorUtilsComponentUtilsDataUtilsGameObjectUtilsRigidbodyUtilsStringUtilsTransformUtilsVectorUtilsWXTools 内容包括&#xff1a; MeshRenderEditor mesh扩展 SpriteGroupTool SpriteGroup操作…

ThinkPHP使用phpword读取模板word文件并添加表格

1.安装phpword包composer require phpoffice/phpword 2.模板文件结构 如上图框住的是要替换的文本和要复制表格样式 实现代码 <?phpnamespace app\api\logic;use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\SimpleType\TblWidth; use PhpOffice\PhpWord\…

DeepSeek搭配Excel,制作自定义按钮,实现办公自动化!

今天跟大家分享下我们如何将DeepSeek生成的VBA代码&#xff0c;做成按钮&#xff0c;将其永久保存在我们的Excel表格中&#xff0c;下次遇到类似的问题&#xff0c;直接在Excel中点击按钮&#xff0c;就能10秒搞定&#xff0c;操作也非常的简单. 一、代码准备 代码可以直接询问…

解决显示器在高刷条件下花屏的问题

起因是家里的显示器好久没用之后&#xff0c;100HZ的刷新率下会花屏&#xff0c;在75HZ的情况下就正常显示&#xff0c;在网上找了一圈感觉是硬件问题解决不了 于是想了想如果我用90HZ呢&#xff1f;不过原始的情况下没有自定义刷新率的选择&#xff0c;不过amd和nvida控制面板…

IP-----双重发布

目录 6.双重发布 1.重发布的作用 2.部署条件 1.必须存在ASBR 2.种子度量值 3.重发布的规则 4.重发布的数量 5.重发布的场景 1.场景和规则 2.直连和静态 3.动态RIP 4.动态OSPF 5.更改开销值 6.重发布的问题1 7.重发布的问题2 1.流量 2.前缀列表 3.偏移列表 4…

Ruby基础

一、字符串 定义 283.to_s //转为string "something#{a}" //定义字符串&#xff0c;并且插入a变量的值 something//单引号定义变量 %q(aaaaaaaaa) // 定义字符串&#xff0c;&#xff08;&#xff09;内可以是任何数&#xff0c;自动转义双引号%Q("aaaaa"…

基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)

摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响&#xff0c;导致在真实临床环境中诊断不可靠。领域泛化&#xff08;Domain Generalization, DG&#xff09;方法旨在通过多领域训练提升模型在未知领域的性能&#xff0c;但…

C#—Settings配置详解

C#—Settings配置详解 在C#项目中&#xff0c;全局配置通常指的是应用程序的设置&#xff08;settings&#xff09;&#xff0c;这些设置可以跨多个类或组件使用&#xff0c;并且通常用于存储应用程序的配置信息&#xff0c;如数据库连接字符串、用户偏好设置等。 Settings配置…

国自然面上项目|基于多模态MR影像的胶质母细胞瘤高危区域定位及预后预测研究|基金申请·25-02-28

小罗碎碎念 今天和大家分享一个面上项目&#xff0c;执行年限为2019.01&#xff5e;2022.12&#xff0c;直接费用为57万元。 胶质母细胞瘤&#xff08;GBM&#xff09;预后差且差异大&#xff0c;异质性是重要因素&#xff0c;临床手段难评价。影像组学为异质性研究提供方法&am…

Nat Mach Intell | AI分子对接算法评测

《Nature Machine Intelligence》发表重磅评测&#xff0c;系统评估AI与物理方法在虚拟筛选&#xff08;VS&#xff09;中的表现&#xff0c;突破药物发现效率瓶颈。 核心评测体系&#xff1a;三大数据集 研究团队构建了三个新型测试集&#xff1a; TrueDecoy&#xff1a;含14…

安路FPGA开发入门:软件安装与点灯与仿真(TangDynasty ModelSim)

文章目录 前言软件安装开发软件仿真软件 点灯测试代码编写与编译引脚分配固件下载 仿真测试ModelSim添加仿真库TangDynasty仿真设置进行仿真 后记 前言 最近因为工作需要用安路的FPGA&#xff0c;这里对安路FPGA开发相关流程做个记录。作为测试只需要一个核心板&#xff08;我这…

千峰React:外部库引用

flushSync强制刷新 如果不强制刷新是这样&#xff1a;每次count在下一轮才更新 import { useState, useRef } from react import { flushSync } from react-domfunction App() {const [count, setCount] useState(0)const refuseRef(null)const handleClick () > { setCo…

防火墙旁挂组网双机热备负载均衡

一&#xff0c;二层交换网络&#xff1a; 使用MSTPVRRP组网形式 VLAN 2--->SW3为主,SW4 作为备份 VLAN 3--->SW4为主,SW3 作为备份 MSTP 设计 --->SW3 、 4 、 5 运行 实例 1 &#xff1a; VLAN 2 实例 2 &#xff1a; VLAN 3 SW3 是实例 1 的主根&#xff0c;实…

二、QT和驱动模块实现智能家居----2、编译支持QT的系统

因为我们的Linux内核文件不支持QT系统&#xff08;当然如果你的支持&#xff0c;完全跳过这篇文章&#xff09;&#xff0c;所以我们要从网上下载很多软件包&#xff0c;这里直接用百问网的软件包&#xff0c;非常方便。 一&#xff1a;Ubuntu 配置 1 设置交叉编译工具链 以…