tanzhuo

tanzhuo

专研技术的程序员

Redis 缓存一致性

缓存一致性 首先我们先说说什么是缓存一致性问题,为什么要解决,以及方案是什么。 缓存一致性问题是指在使用缓存时,由于缓存数据与数据库数据的不一致性,可能会导致数据错误或者数据丢失等问题。这种问题在高并发场景下尤为常见,因为多个线程同时读写同一份数据时,很难保证数据的一致性。如何保证和Redis内存中的数据与DB数据库中的数据保持一致,并且不能出现数据不一致的情况(高并发场景中),如果出现数据不一致对于某些情况来说可能会出现大麻烦,缓存一致性的解决方案也很重要。 以下是我列出常见的几种方案,以及它们在高并发场景下各自的问题。 直接写入缓存 (不推荐) 在3,4步执行时高并发场景下无法保证写入Redis数据的Java线程会进行顺序执行(因为CPU时间分片问题,并且加上分布式、微服务情况更加明显)。才会导致最新数据可能被其他线程中的旧数据覆盖,如果发生了之后后续没有其他线程执行,可能缓存数据一直会保持旧数据情况。 这里可能有人会直接使用分布式锁(单应用加JVM锁即可),加锁需要控制整个DB写入到Redis写入的流程,并且每个Key操作的函数范围需要自己把控,且效率肯定下降得厉害
4 min read

Redis 缓存穿透,击穿,雪崩

缓存穿透 缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍,然后返回空。 如果有恶意攻击者不断请求系统中不存在的数据,会导致短时间大量请求落在数据库上,造成数据库压力过大,甚至击垮数据库系统。 解决方案: (1)布隆过滤器 布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢(O(n),O(logn))。不过可以使用散列表(又叫哈希表,Hash table)数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit array)中的一个点。这样一来,我们只要看看这个点是不是1就可以知道集合中有没有它了。这就是布隆过滤器的基本思想。 (2)返回空 当缓存未命中,查询
5 min read

Redis 主从,哨兵,集群搭建

前言 记录一下自己对 redis 主从,哨兵,集群三种模式搭建流程,redis的所有部署模式都不复杂,主要是对配置文件的书写,以及各个模式的优缺点分析。 RedisRedis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message brokerRedis 部署环境 操作系统 CentOS7 Redis版本:Redis7.0.5 主从模式 优点:配置简单,快速,读写分离,完全分担了主节点的读压力,并且从节点还可套娃继续配置多层从节点。 缺点:非高可用,主节点宕机,则失去写能力,数据冗余量大,每个从节点100%复制主节点数据。 非高可用架构,
16 min read

关于Serverless架构

Serverless(无服务器架构)成为新的热点,无服务器云函数可以让用户无需关心服务器的部署运营,只需开发最核心的业务逻辑,即可实现上线运营,具备分布容灾能力,可以依据负载自动扩缩容,并按照实际调用次数与时长计费。 Serverless的优点是可以快速,低成本,无运维即可达到业务高可用上线。但也面临着与云厂商强行进行绑定,对于未来是否可以业务迁移到其他云厂商,目前看来还是有一定的成本,在函数FC中,我们会集成入 OSS,RDS,NAS等云厂商的服务,想要直接迁移其他云厂商的还是得去修改部分代码。 Serverless的每个函数都是沙箱环境,可以运行不同的语言,让每个语言发挥自己最擅长的领域,目前阿里云的函数计算服务 FC 每月可以 100w 次函数免费调用执行。这对于部分小微企业来说,是非常不错的选择,毕竟前期自己部署机房或低成本的云服务器都有着一定的开支,而Serverless在前期的按调用次数收费可以节约很大部分的上线部署成本。 但目前 Serverless 有一个冷启动得过程,导致在事件通知或HTTP第一次调用时,延迟将会根据容器启动时间而增加。不过也可以购买预备资源解决
3 min read

Linux 系统不同发行版对比

linux系统有着不同的发行版本,不同的组织对其自己的发行版进行维护。此次笔记记录我认知的部分发行版的区别。 1、Debian 是目前我最喜欢使用的发行版,它的10版本非常稳定,并且系统占用非常小。是目前我在生产环境的选择。 Debian -- The Universal Operating SystemThe Universal Operating System [https://www.debian.org/]2、CentOS 是 Red Hat 从商业收费操作系统的分支版本,在商业操作系统上进行了免费。功能以及稳定性目前也是非常不错,但肯定在某些地方有阉割。毕竟人家有一个收费的系统。并且 CentOS 目前已经停止了维护,原作者 Gregory Kurtzer 也启动了新项目的 Rocky Linux 操作系统。 The CentOS Project [https://www.centos.org/]3、
2 min read

血源诅咒

本作背景设定在位于遥远东方、外人罕至的山区古都“亚楠”。亚楠封闭排外,但据传亚楠拥有可以治疗外界不治之症的名为“血疗”的神秘医疗技术,许多饱受疾病痛苦的病患长途跋涉来到亚楠以寻求“血疗”治愈。然而,受难以名状存在的伟力影响,一种名为“兽化病”的瘟疫在亚楠蔓延,亚楠的人们不可避免地异变为丧失心智的狂暴野兽。 “血疗”的神秘面纱,将会在玩家的游玩下一点点的解开。 原来在远古时代,在这个世界里,存在着一群主宰星球上位者,它们被人 称为神灵。根据克苏鲁神话的设定,分为了旧神,古神,外神三种,其中古神是最上位的存在。过了不知道多少亿年,这些神的肉身开始腐坏,崩坏,但就算如此他们强大的精神力还是存在在这个世界,一直找寻一个强大的肉身作为自己的神子,来延续自己。这便是一切故事的起源。 当神们消失的很多年以后,人类开始繁殖,人类帝国开始兴起,但是由于普通人的灵视不够,所以即便人类遍布全球,却也没有发现古神们的存在。 直到一个古国开始崛起,它的名字叫苏美鲁。由于这个国度异常兴旺,他们就有更多的精力放在学术研究上。再一次偶然的机会下,他们的一些学者竟然发现一个古神的尸体,称之为梅西,血源的故事就此
2 min read

Linux 目录结构分析

/bin:存放着常用的指令和二进制可程序。 /boot:存放启动Linux系统的内核文件,包括连接文件和镜像文件。 /dev:Device(设备)的缩写,是 Linux 系统目前连接的外部设备,外部设备的访问和文件访问的方式一样。 /etc:专用于存放系统的配置文件和子目录列表。 /home:用户文件夹,每个系统账号都会创建一个不同的文件夹名称。 /root:管理员用户的主目录。 /run:临时文件目录,存储系统启动以来的临时信息,当系统重启,该目录下的文件将会被清理掉。 /opt:optional “可选择”的意思,作用是安装第三方软件的地方 /sbin:管理员用户才能执行的命令和程序文件夹。 /tmp:临时文件目录。10天内未访问、未更该或未修改的文件将自动从这个目录中删除。 /usr:用户应用程序和文件放置的文件夹目录。 /var:存放着经常变动的文件,例如系统日志等文件。
1 min read

随心笔记

技术无止境 创新不停驻