游戏推广平台代理加盟/新网站百度seo如何做
文章目录
- 缓存的三个风险
- 数据结构
- 淘汰策略 和 过期删除策略
- 过期删除
- 淘汰
- 如何理解单线程
- redis特性
- 复制
- gossip协议
- 事务(和mysql不同,是不严格的事务 )
- 集群(高可用)
- 管道
- 持久化
缓存的三个风险
- 缓存雪崩(缓存引起的数据库,乃至整个系统的雪崩)(大量Key同时过期 或者redis挂)
- 过期时间加扰动值
- 后台更新缓存值(缓存永不过期,消息队列)
- key过期,只允许一个请求(线程) 回源 (锁机制,甚至不用分布式锁也可以)
- 击穿(热点数据过期)
- key分片,key= key1 + key2… ,各个分片分担流量
- 雪崩的处理方式都可以用到击穿的场景
- 穿透(用户访问的数据,既不在缓存中,也不在数据库中)
- 对被穿透key的访问限流
- 缓存空值/默认值
- 布隆过滤器(redis也自带了布隆过滤器的实现)
- 如果bloomfilter说有,那可能没有
- 如果bloomfilter说没有,那一定就没有
see also
数据结构
- str
- 存session
- 分布式锁(setnx)
- 简单计数器
- list
- mq
- hash
- 存储对象
- set
- 集合特性:不重复、可交集、差集、并集计算
- 点赞场景:一个用户只能对一个key(文章) 点赞一次
- 共同好友、共同关注的公众号场景
- 抽奖:一个用户只能抽一次
- zset
- 排行榜(根据分数去排序)
- 相同分数下获取满足前缀的元素,比如获取131 开头的电话号码
- bitmaps
- value只能为0或1,用于大数据集的 0、1 值统计,比如签到,要么签到了要么没签到
- hyperloglog
- 统计大数据集的不同元素数量。内存占用小,不过只能取近似精确的结果
- 百万级网页 UV 计数
- 地理空间(geospatial)
- 存储和计算经纬度
Stream
数据类型- 实现消息队列的绝佳数据结构:支持持久化、自动生成全局唯一ID、ack模式、消费者组机制
see also
淘汰策略 和 过期删除策略
Redis的淘汰和过期删除策略是两个不同的概念。
- 过期删除:key 带ttl
- 淘汰: 内存不够用了,删除符合条件的key
过期删除
1、如何判断key 已经过期?
redis的【过期字典】数据结构中存储了 <key,ttl> ,get key的时候先从【过期字典】中get ,并将ttl 和当前时间做比较,可以判断出key是否过时。
2、过期删除策略
- 定时删除: set key ttl的时候,注册一个定时事件,到点就删除。
这种方式对内存友好(到点就删),但当ttl key多时,对CPU不好,因为需要额外线程干活。 - 惰性删除(
lazy free
): get key 时,发现key过期了就删。
这对内存不够好(删得不及时),但对CPU好 - 定期随机检查删除: 每隔一段时间【随机】从过期字典中选出一批key检查是否过期,如是则删除。
这是定时删除和惰性删除的折中。
redis真正的做法是 【惰性删除】 + 【定期随机检查删除】共存。
淘汰
分两大类
一类【不进行淘汰-noevinction】,当内存不够用,返回错误;
二类【进行淘汰】。
【进行淘汰】的策略可再分:
1、设置了ttl key淘汰
- volatile-random : 随机淘汰设置了ttl 的key
- volatile-ttl : 优先淘汰更早过期的key
- volatile -lru :least-recently-used
- volatile -lfu: least-frequently-used
2、所有范围的key 淘汰
- allkeys-random : 随机淘汰任意key
- allkeys-lru
- allkeys-lfu
值得一提是:3.0+的redis,使用 【noeviction】作为默认策略,这对用户使用redis的容量评估提供了更高的要求。
如何理解单线程
- before6.0,网络IO+KV读写是 单线程;
- after6.0,网络IO是多线程,KV操作是单线程。即使多线程并非彻底的多线程,I/O线程只能同时执行读或者同时执行写操作
redis特性
Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)
复制
主从复制是个比较复杂的过程,详见 see also
gossip协议
事务(和mysql不同,是不严格的事务 )
假如现开启了事务,包括了一组命令,拿传统DB的ACID“套”一下:
-
原子性A
- exec前,如果命令入队失败,事务不会执行,原子性可以保证
- exec后,多个命令中其一执行异常,不会回滚这组命令,所以不能保证原子性
-
能保证隔离性 A 【客户端A执行事务(注意只是exec期间),客户端B的请求会阻塞住】
-
一致性 C
- 理解1:一致性的核心是约束 (唯一性约束” 和 “完整性约束”),redis能满足
- 理解2:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。
因此,字母 C 严格来说不属于 ACID 。这就没有“redis的一致性”说法了
-
持久性 D
- 开启了
rdb/aof
rdb
可能没有生成快照aof:no/everysec
有丢失数据风险,always
性能差一般不使用,所以实践角度看,持久性没有保证
- 开启了
-
隔离性I
- 并发操作在
EXEC
执行前,隔离性需要通过WATCH
机制来保证 - 并发操作在
EXEC
命令之后,隔离性可以保证:Redis 是单线程执行命令,EXEC
命令执行后,Redis 会保证先把事务队列中的所有命令执行完之后再执行之后的命令。
- 并发操作在
-
see also
集群(高可用)
- 主从 【主可读写,从只读;主挂了,不可写,要手动切换主】
- 哨兵 【基于主从,主可读写,主挂了,哨兵会重新选主。哨兵集群要高可靠,算是独立的服务。一个哨兵集群可以检测多个redis主从】
see also - cluster集群 【官方推荐的高可用方案】
- 【主从和哨兵数据都是没有分片的,容量有上限;cluster会分片,分片后mget mset等不可用】
- 【实际上是多组主从 “组团”成了一个集群,只由主读写,从不提供服务】
- 【客户端查询路由- 客户端连任意节点可能被 重定向 (注意不是转发)到其他节点】
- 【无中心节点、redis 虚拟槽slot分布到多个节点、扩缩容方便、高可用+可failover】
- 【但无监控、依赖客户端做路由、failover节点检测慢、gossip协议本身有开销】
- 【slot是数据管理和迁移的基本单位,类比kafak分区;槽的迁移不影响节点服务】
- 【数据 – slot --节点】
- 【三主三从】
- see also
P.S. redis 是根据crc(key)%16384 来决定存储这个kv对的slot的位置,也即是说,sharding 是在key维度的。这解决不了热点key的问题。
管道
一组命令发给服务端 ,不仅减少了网络传输的开销,更重要是极大减少服务端IO,增大吞吐
持久化
- RDB (
redis database
):fork子进程出来dump内存快照二进制文件到磁盘,文件小,恢复快,但可能丢数。大数据集场景下fork子进程也可能比较耗时,redis可能有抖动 - AOF (
Append-on-file
)- 写命令落盘到文件,恢复时回放
append
本质是写文件系统buffer
,OS会【delayed write】- 文件重写:aof不能持续追加,毕竟磁盘有限,且过大的文件,回放极其费时,因此redis会压缩文件(合并命令,有点像kafka的
Compaction
)。
redis内数据对象的最新状态生成新的AOF文件,体积较小
- Redis支持混合持久化,对AOF文件重写有什么影响
- 纯AOF方式
RDB+AOF
方式:先按照RDB格式写入数据状态,然后把重写期间AOF缓冲区的内容以AOF格式写入,文件前半部分为RDB格式,后半部分为AOF格式
- 开启混合持久化:文件是【
RDB
头+AOF
尾】,Redis发现AOF文件为RDB头,会使用RDB数据加载的方法读取并恢复前半部分;然后再使用AOF方式读取并恢复后半部分
(这特别像mysql的备份数据恢复,备库+binlog)
相关文章:

Redis常识
文章目录 缓存的三个风险数据结构淘汰策略 和 过期删除策略过期删除淘汰 如何理解单线程redis特性复制gossip协议事务(和mysql不同,是不严格的事务 )集群(高可用)管道持久化 缓存的三个风险 缓存雪崩(缓存…...

Instant,LocalDate,LocalTime,LocalDateTime和ZonedDateTime
Instant 封装了从 1970-01-01T00:00:00Z 开始的秒数,相当于时间戳。 主要有两个属性: private final long seconds; private final int nanos;LocalDate 用于表示日期,包括年、月、日,例如 2017-12-03。 主要有三个属性&…...

Web入门笔记
Web入门笔记 HTTP协议 超文本传输协议 规定了浏览器和服务器之间数据传输的规则,请问数据和响应数据的格式 基于TCP请求-响应模式一次请求对应一次响应无状态的协议 请问数据格式 浏览器版本:解决浏览器兼容问题。GET请求体:存放请求参数…...

Linux网络编程二(TCP三次握手、四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)
TCP三次握手 TCP三次握手(TCP three-way handshake)是TCP协议建立可靠连接的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的详细过程: 假设客户端为A,服务器为B 1、第一次握手(SYN1,seq500&…...

C#核心笔记——(一)C#和.NET Framework
C#是一种通用的,类型安全的面向对象编程语言。其目标是提高程序员生产力。 一.面向对象 C#实现了丰富的面向对象范式,包括封装、继承、多态。 C#面向对象特性包括: 统一的类型系统 类与接口 属性、方法、事件 C#支持纯函数模式 二、类型安…...

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理
目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…...

云服务器的先驱,亚马逊云科技海外云服务器领军者
随着第三次工业革命的发展,移动互联网技术带来的信息技术革命为我们的生活带来了极大的便捷。其中,不少优秀的云服务器产品发挥了不可低估的作用,你或许听说过亚马逊云科技、谷歌GCP、IBM Cloud等优秀的海外云服务器。那么云服务器有哪些&…...

QT webengine显示HTML简单示例
文章目录 参考示例1TestWebenqine.promainwindow.hmainwindow.cppmain.cpp效果 示例2 (使用setDevToolsPage函数)main.cpp效果 参考 QT webengine显示HTML简单示例 示例1 编译器 : Desktop Qt 5.15.2 MSVC2019 64bit编辑器: QtCreator代码: TestWebenqine.pro # TestWeben…...

Spark_SQL函数定义(定义UDF函数、使用窗口函数)
一、UDF函数定义 (1)函数定义 (2)Spark支持定义函数 (3)定义UDF函数 (4)定义返回Array类型的UDF (5)定义返回字典类型的UDF 二、窗口函数 (1&…...

【Leetcode】【每日一题】【中等】274. H 指数
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/description/?envTyped…...

MySQL读写分离技术及实现方案
MySQL读写分离技术及实现方案 本文主要介绍了MySQL读写分离技术的原理、实现方案以及示例。通过使用读写分离技术,可以提高数据库的性能,降低服务器的压力。 一、MySQL读写分离技术简介 读写分离是指将数据库的读操作和写操作分别分配到不同的服务器上…...

git 推送到github远程仓库细节处理(全网最良心)
我查看了很多网上的教程都不是很好 我们先在github创建一个仓库,且初始化 readme 我们到本地文件初始化仓库 添加远程仓库 这时候我们就 git add . , git commit ,再准备git push 的时候 显示没有指定远程的分支 我们按照提示操作 提示我们要先git pull 提示我…...

算法训练|数据流中的中位数
LCR 160. 数据流中的中位数 - 力扣(LeetCode) 总结:这题自己最开始的想法是直接使用vector容器,每次取中位数的时候就进行一次排序,超时。题解很巧妙的利用大根堆和小根堆来解决问题,大根堆和小根堆各存一…...

LeetCode 2558. 从数量最多的堆取走礼物【模拟,堆或原地堆化】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

windows服务器环境下使用php调用com组件
Office设置 安装 office2013 且通过正版激活码激活 在组件服务 计算机 我的电脑 DOM 中找到 Microsoft Word 97 - 2003 文档 服务,右键属性 身份验证调整为 无 在 标识中 调整为 交互式用户 php环境设置 开启com组件扩展 在php.ini中设置 extensionphp_com_dotn…...

3DCAT+东风日产:共建线上个性化订车实时云渲染方案
近年来,随着5G网络和云计算技术的不断发展,交互式3D实时云看车正在成为一种新的看车方式。 与传统的到4S店实地考察不同,消费者可以足不出户,通过网络与终端设备即可实现全方位展示、自选汽车配色、模拟效果、快捷选车并进行个性…...

【VR开发】【Unity】【VRTK】1-无代码VRVR开发介绍
本篇开始精简讲解VRTK相关的知识。 VRTK是基于Unity的一套提供无代码VR开发的插件,这套插件开源,可商用,集合了目前可能的VR体验组件,可以让不会C#编程但想要开发VR体验的人在不写一行代码的前提下开发出心仪的VR作品。 这套组件问世后也很受欢迎,目前已经进化到了第四代…...

全国地级市最新城投债数据(2006-2023.2)
地级市-城投债数据是关于各地级市发行的城市投资建设项目资金债券的统计数据。这些数据对于研究者来说有着一定的参考价值。首先,地级市-城投债数据能够提供全国各地级市城投债发行的数量和规模情况,帮助研究者了解城市基础设施建设和经济发展的情况。其…...

vm_flutter
附件地址 https://buuoj.cn/match/matches/195/challenges#vm_flutter 可以在buu下载到。 flutter我也不会,只是这个题目加密算法全部在java层,其实就是一个异或和相加。 反编译 package k;import java.util.Stack;/* loaded from: classes.dex */ pu…...

MySQL数据库#6
Python操作mysql 在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。 操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。 import pymysql…...

YOLO v1(2016.5)
文章目录 AbstractIntroduction过去方法存在的问题我们提出的方法解决了... Unified DetectionNetwork DesignTrainingInference Comparison to Other Detection SystemsDeformable parts modelsR-CNNOther Fast DetectorsDeep MultiBoxOverFeatMultiGrasp ExperimentsConclusi…...

SQL比较两次的字段集合,找出并返回差异,主要用于更新记录事件
Create PROCEDURE [dbo].[SysGetTableFieldsCompare] -- Description: <比较两次的字段集合,找出并返回差异,主要用于更新记录事件> -- Return 0- 成功, -1- 没有这个表 -- Rev: 1.00 -- FieldsSource Nvarchar(max) , FieldsTarg…...

muduo源码剖析之Acceptor监听类
简介 Acceptor类用于创建套接字,设置套接字选项,调用socket()->bind()->listen()->accept()函数,接受连接,然后调用TcpServer设置的connect事件的回调。 listen()//在TcpServer::start中调用 封装了一个listen fd相关…...

express session JWT JSON Web Token
了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 当前端…...

负载均衡策略 LVS
一、集群功能分类 1、LB (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台…...

驱动开发6 IO多路复用——epoll
核心操作:一棵树、一张表、三个接口 相关案例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys…...

【python学习笔记——列表】
1、列表定义 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list[]非空列表 列表定义时例如list[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 2、列表索引规则 列表名[start:stop:step],前闭后开,即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
目录 前言1. YOLOv7-PTQ量化流程2. 准备工作3. 插入QDQ节点3.1 自动插入QDQ节点3.2 手动插入QDQ节点 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 Tens…...

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
坑一:回显问题 富文本组件: <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…...

USACO12OPEN Balanced Cow Subsets G(meet in the middle)
洛谷P3067 [USACO12OPEN] Balanced Cow Subsets G 题目大意 我们定义一个奶牛集合 S S S是平衡的,当且仅当满足以下两个条件: S S S非空 S S S可以被划分为两个集合 A , B A,B A,B,满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...