Redis整理合集

news2025/1/16 11:07:22
    • SQL和NOSQL的区别?

SQL

NOSQL

数据结构

结构化

非结构化

数据关联

关联的

非关联的

查询方式

SQL查询

非SQL查询

事物特性

ACID(事务)

BASE

存储方式

磁盘

内存

扩展性

垂直

水平

使用场景

  1. 数据结构固定

  1. 相对业务对数据的安全性

  1. 一致性需求较高

  1. 数据结构不固定

  1. 对一致性、安全性需求不高

  1. 对性能要求

2.Redis特征:

  1. 键值型 Value支持多种不同数据结构,功能丰富。

  1. 单线程 每个命令具有原子性。

  1. 低延迟、速度快(基于内存,10多路复用,良好的编码)。

  1. 支持数据持久化。

  1. 支持主从集群、分布集群。

  1. 支持多语言客户端。

3.基本类型:

  1. String(字符串)

set key value  //设置指定key的value值
get key  //获取指定key的vaule值
getset key value  //为key设置新的value,并返回key的旧值value
mget key1 key2 key3... //获取一个或多个key值value
setnx key //自动判断key值是否存在,key值不存在时自动添加,存在时无操作
strlen key //返回key所存储的字符串的长度
mset key1 value1 key2 value2 ... //同时添加元素
incr key  //将key值存储的数字进行自增1
decr key  //将key值存储的数字进行自减1
incrby num //将key所存储的值上给定的增量值num
append key value //如果key值所处的是字符串,将value值自动添加到原值的后面
  1. Hash(哈希)

hset key field value [filed value]  //存放指定key的filed和value值
hdel key filed1 filed2  //删除一个或多个哈希表字段
hexists key filed //查看哈希表key中,指定的字段是否存在
hget key filed  //获取存储在哈希表中指定key中的字段
hgetall key  //获取在哈希表中指定key的所有字段和值
hincrby key filed num  //为哈希表key中指定的字段的整数值加上增量num
hkeys key  //获取所有哈希表中的字段
hlen key  //获取哈希表中的字段的数量
hmset key filed1 filed2 //获取所有给定字段的值
hmset key filed1 value1 filed2 value2  //同时将多个filed-value设置到哈希表key中
hvals key  //获取哈希表中的所有值
  1. List(列表)

特征:1.有序 2.元素可以重复 3.插入和删除快 4.查询速度一般

llen key  //获取列表长度
lpop key  //移出并获取列表中的第一个元素
lpush key value1 value2...  //将一个值插入到已存在的列表的头部
lrange key num1 num2  //获取到num1,num2范围内的元素
lrem key count value  //移出列表中的元素
lset key index value  //通过索引(下表)设置列表元素的值
ltrim key num1 num2  //对一个列表进行修剪,在num1,num2中的元素进行保留,不在指定范围内的元素进行删除
rpop key  //移出并获取列表中的最后一个元素
rpoplpush  列表 列表  //移出列表的最后一个元素,并将该元素添加到另一个列表进行返回
rpush key value1 value2  //在列表中红添加一个或者多个值
rpushx key value  //为已存在的列表添加值
  1. Set(集合)

特征:1.无序 2.元素不可重复 3.查找快 4.支持交集、并集、差集

sadd key member1...  //向集合中添加一个或多个成员
scard key  //获取集合的成员数
sdiff key1 key2  //返回第一个集合和第二个集合的差异
sinter key1 key2  //返回给定所有集合的交集
sismember key member //判断member元素是否是集合key的成员
smembers key  //返回集合中的所有成员
smove source destination member  /将membe元素从source集合移动到destination集合
spop key  //移除并返回该元素
srandmember key 数字  //返回集合中一个或多个元素
srem key member1...  //移除集合中一个或多个元素
sunion key1 key2  //返回所有给定集合的并集
  1. SortedSet(有序集合 按分数进行排序 score)

特征:1.可排序 2.元素不重复 3.查询速度快

zadd key score1 member1 [score2 member2]  //向有序集合添加一个或者多个成员或者更新已经存在的分数
zcard key  //获取有序集合的成员数
zcount key min max  //计算在有序集合中指定区间分数的成员数
zrange key start stop withscores  //通过索引区间返回有序集合指定区间内的成员
zrevrangbyscore key max min withscores  //返回有序集合中指定分数区间内的成员
zscore key member //返回有序集合,成员的分数值

4.SpringDataRedis

  1. 提供了对不同Redis客户端的整合(Lettuce 和 Jedis)

  1. 提供了RedisTemplate 统一API来操作Redis

  1. 支持Redis的发布订阅模型

  1. 支持Redis哨兵和Redis集群

  1. 支持基于Lettuce的响应式编程

  1. 支持基于JDK、JSON、字符串、Spring对象的数据库序列化以及反序列化

  1. 支持基于Redis的JDKCollection实现

5.缓存

缓存定义:缓存就是数据交换的缓存区,是存储数据的临时地方,一般读写性能较高

缓存作用:1.降低后端负载 2.提高读写效率,降低响应时间

缓存的成本:1.数据一致性成本 2.代码维护成本 3.运维成本

缓存更新策略:

内存淘汰

超时剔除

主动更新

说明

不同自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存。

给缓存添加TTL时间,到期后自动删除缓存,下次查询时更新缓存

编写业务逻辑时,在修改数据库的同时,更新数据缓存

6.最佳实践方案

  1. 低一致性需求:使用Redis自带的内存淘汰机制

  1. 高一致性需求:主动更新,并以超时剔除,作为兜底方案

  • 读操作

  1. 缓存命中直接返回

  1. 缓存未命中则查询数据库,并写入缓存,设置超时实践

  • 写操作

  1. 先写数据库,然后再删除缓存

  1. 确保数据库与缓存操作的原子性

7.缓存穿透

缓存穿透:客户端请求的数据在缓存中和数据库中都不存在,这样缓存都不会生效,都会打在数据库中,解决方案:1.缓存空对象 2.布隆过滤 3.增强id的复用性 4.做好数据校验 5.做好热点参数的限流

缓存空对象的流程:

8.缓存雪崩

缓存雪崩:同一时段大量缓存key同时失效或者Redis服务宕机

解决方案:

  1. 给不同的key的TTL添加随机值

  1. 利用Redis集群提高服务的可用性

  1. 给缓存业务添加降级限流策略

  1. 给业务添加多级缓存

9.缓存击穿

缓存击穿:高并发访问并且缓存重建业务较为复杂的key突然失效,会给数据库带来巨大的冲击

解决方案:

  1. 互斥锁

优点:1.没有额外的内存消耗 2.保证一致性 3.实现简单

缺点:1.线程需要等待,性能受影响 2.可能有死锁的危险

实现流程:

  1. 逻辑过期

优点:1.线程无需等待,性能较好

缺点:1.不保证一致性 2.有额外内存消耗 3.实现复杂

实现流程:

10.缓存工具封装

基于StringRedisTemplate封装一个缓存工具类,满足下列需求:

  1. 将任意Java对象序列化为Json并存储在String类型的key中,并且设置TTL过期时间

  1. 将任意Java对象序列化为Json并存储在String类型的key中,并且设置逻辑过期时间,用于处理缓存击穿问题

  1. 根据指定的key查询缓存,并反序列化为指定类型,利用缓存空值的方式解决缓存穿透问题

  1. 根据指定的key值查询,并反序列化为指定类型,需要利用逻辑过期解决缓存击穿问题

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

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

相关文章

论文投稿指南——中文核心期刊推荐(地质学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

【性能优化】Mybatis Plus:优化查询速度 - SQL替换Service

优化查询速度 - SQL替换Service Service 接口问题 下面是原先的 Service 实现类代码,有门店 ID、订单状态、查询时间段,然后查出了所有的结果,继续使用 java8 的特性获取汇总结果,随着项目的推移,数据量越来越大&…

Webpack 中使用source map 在开发过程中进行调试

我们都知道webpack在打包的时候会将源代码打包成一个bundle文件,bundle文件就是经过了loader转换,还有webpack的一些插件处理,以及webpack构建过程中的一些转换,最后会生成一个大的JS文件,直接去看这个文件是没法调试的…

【React】一.React基本使用

目录 基本介绍 一.React基本使用 安装命令 使用方法 记录问题 使用React脚手架初始化项目 基本介绍 构建用户界面的js库用户界面可以理解为html页面(前端)react主要用来写html页面或者构建web应用只负责视图层(V)的渲染。&am…

【ROS2 入门】虚拟机环境 ubuntu 18.04 ROS2 安装

大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,做为有别于ROS1的版本,做了很多更新和改变,我还是很期待自己逐步去探索ROS2中的惊喜。在安装过程中我也遇到的一些坑&a…

阿里云服务器安装wireshark图形界面与远程连接配置(使用tigervnc)

tags: Server Ubuntu Wireshark 写在前面 昨天折腾了一下透视HTTP协议这门课的实验环境, 通过阿里云的轻量应用服务器来完成了, 但是还差一步, 那就是wireshark的安装, 虽然通过apt安装好了, 但是打不开实在是烦人, 后来经过各种搜索, 我发现问题出在了tightvnc上, 这个vnc服…

vue2中swiper6不能正常使用的解决

第一步安装swiper6 第二步在main.js中引入swiper6 注意:也可以在其他地方引入,但是在main.js中引入,所有的组件都能用swiper的样式 样式的引入,不是平常的引入,引入代码如下 注意:一定要这样引入样式 …

【自学Python】Python比较运算符

Python比较运算符 Python比较运算符教程 在 Python 中,比较运算符的结果都是 bool 型,也就是要么是 True,要么是 False。关系表达式经常用在 if 结构的条件中或 循环结构 的条件中。 Python比较运算符语法 比较运算符功能说明>大于如果…

正则表达式表单校验实例

描述 一个简单的注册页面&#xff0c;对输入框进行了简单的正则表达式校验 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><link rel"stylesheet" href"css/index2.css" …

深入思考 Schema 管理的几个基本问题

本文作者&#xff1a;王大龙&#xff0c;数据分析领域资深工程师&#xff0c;观远产品中一切数据的风暴降生之主&#xff0c;元数据世界的精神领袖&#xff0c;数据治理的永恒守望者。前言我发现理解某一个具体「事物」最好的方式是先去理解其背后所遵循的「范式」。范式是一个…

java-Spring集成定时器使用方法

文章目录定时器配置文件测试文件配置参数说明SpringBoot集成schedulepom.xml文件启动类运行结果定时器配置文件 spring核心配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans:beans xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

python笔记之转义问题 字符串前缀 正则表达式

Python的字符串自己也用\转义 s ABC\\-001 # Python的字符串 # 对应的正则表达式字符串变成&#xff1a; # ABC\-001建议使用Python的r前缀&#xff0c;就不用考虑转义的问题了 s rABC\-001 # Python的字符串 # 对应的正则表达式字符串不变&#xff1a; # ABC\-001关于斜杠…

RGB、LVDS、MIPI和EDP接口液晶屏

RGB、LVDS、MIPI和EDP接口液晶屏概述一、RGB_TTL二、LVDS三、MIPI&#xff08;手机、平板等数码产品应用场合&#xff09;四、eDP接口&#xff08;笔记本、工控机、工业平板等应用场合&#xff0c;用来取代LVDS接口&#xff09;五、应用概述 液晶屏有RGB、LVDS、MIPI DSI和EDP等…

《MYSQL实战45讲》笔记(1-10)

1&#xff1a;一条SQL查询语句是如何执行的&#xff1f; 下面我们来结合一张图来了解MySQL的基本架构 总体来看&#xff0c;MySQL分为服务层和存储引擎两个部分。其中存储引擎负责数据的存储和提取&#xff0c;而服务层负责连接的建立、分析、优化、执行等其他步骤。 常见的…

虚幻引擎中GPU Lightmass全局光照的使用步骤

GPU Lightmass (GPULM) 是一种光烘焙方法&#xff0c;它预先计算来自具有 Stationary 或 Static 移动性的灯光的复杂光交互&#xff0c;并将该数据存储在创建的应用于场景几何体的光照贴图纹理中。GPU Lightmass 显着减少了为复杂场景计算、构建和生成光照数据所需的时间&#…

MQTT QoS 0, 1, 2 介绍

什么是 QoS 很多时候&#xff0c;使用 MQTT 协议的设备都运行在网络受限的环境下&#xff0c;而只依靠底层的 TCP 传输协议&#xff0c;并不能完全保证消息的可靠到达。因此&#xff0c;MQTT 提供了 QoS 机制&#xff0c;其核心是设计了多种消息交互机制来提供不同的服务质量&…

自监督学习之掩码自动编码器(Masked Autoencoders, MAE)——音频识别方面

自监督学习之掩码自动编码器(Masked Autoencoders, MAE)——音频识别方面 1.参考文献 《Masked Autoencoders that Listen》 2.背景 Transformers和self-supervised learning(自监督学习)占据了计算机视觉(Computer Vision,CV)和自然语言处理(natural language processing, …

百度工程师带你玩转正则

作者 | 向阳 导读 在很多技术领域&#xff0c;都有正则的身影。但许多像我一样的人&#xff0c;只闻其名。因此将正则常用知识汇总&#xff0c;便于查阅。正则表达式&#xff08;Regular Expression&#xff09;是用于描述一组字符串特征的模式&#xff0c;用来匹配特定的字符串…

机械--UG NX2007改变零件的默认颜色

UG&#xff08;现在的新版本叫NX&#xff0c;但一般人仍然沿用UG的叫法&#xff0c;下同&#xff09;&#xff0c;新建零件时&#xff0c;零件的默认颜色是橙色的&#xff0c;个人很不喜欢。 当然&#xff0c;实体化以后&#xff0c;可以改变它的颜色&#xff0c;选中实体以后…

傻瓜式裂变—竖屏视频超级原创,呆头鹅批量剪辑软件上万人使用

呆头鹅批量剪辑软件优势&#xff1a; 专业的技术开发团队&#xff0c;成熟的技术架构&#xff0c;完整的售后服务&#xff0c;我们为您解决所有的后顾之忧 .几乎涵盖市面上已知的所有剪辑功能.几乎涵盖市面上已知的所有剪辑功能.完成通知&#xff0c;运行间隔提醒&#xf…