Redis

你是如何保证 ,Redis 缓存与数据库双写一致性的?

走远了吗. 提交于 2021-01-12 17:59:54
在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据要求实时性不同将数据分为三级。 第1级:订单数据和支付流水数据;这两块数据对实时性和精确性要求很高,所以不添加任何缓存,读写操作将直接操作数据库。 第2级:用户相关数据;这些数据和用户相关,具有读多写少的特征,所以我们使用redis进行缓存。 第3级:支付配置信息;这些数据和用户无关,具有数据量小,频繁读,几乎不修改的特征,所以我们使用本地内存进行缓存。 但是只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题,因为配置信息缓存在内存中,而内存时无法感知到数据在数据库的修改。这样就会造成数据库中的数据与缓存中数据不一致的问题。接下来就讨论一下关于保证缓存和数据库双写时的数据一致性。 整理了一份Java面试宝典完整版PDF已整理成文档 解决方案 那么我们这里列出来所有策略,并且讨论他们优劣性。 先更新数据库,后更新缓存 先更新数据库,后删除缓存 先更新缓存,后更新数据库 先删除缓存,后更新数据库 先更新数据库,后更新缓存 这种场景一般是没有人使用的,主要原因是在更新缓存那一步,为什么呢

MinIO对象存储服务

蹲街弑〆低调 提交于 2021-01-12 14:34:34
MinIO 介绍 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。 中文官网地址: https://docs.min.io/cn/ 开源中国也收录了该软件: https://www.oschina.net/p/minio 特点 分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。 在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。 数据保护 分布式Minio采用 纠删码 来防范多个节点宕机和 位衰减 bit rot 。 分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。 高可用 单机Minio服务存在单点故障,相反,如果是一个有 m 台服务器, n 块硬盘的分布式Minio,只要有 m/2 台服务器或者 m*n /2 及更多硬盘在线

微众银行案例|容器化实践在金融行业落地面临的问题和挑战

邮差的信 提交于 2021-01-12 07:48:00
本文整理自 微众银行容器负责人陈广镇和李焕 在 Techo 开发者大会云原生专题的分享内容——微众容器化实践。本文主要和大家介绍微众的容器化实践,具体分为三个部分: 里程碑、实践之路,以及未来的规划 。 微众应用容器化项目始于2018年底,我们的生产环境在私有机房上,由于基础设施的差异,容器管理系统主要走自研路线,基于开源产品定制。 2019年1月,微众上线了第一个版本,主要实现多K8s集群管理、以及适配公司现有的基础架构。 2019年2月,微众系统接入TKE服务,用于快速构建开发测试环境,我们大部分业务都需要独立的测试环境,利用腾讯云强大的伸缩能力可以减少我们很多的环境维护工作。 2019年6月,平台优化了核心的调度逻辑,支持了多业务多DCN共享资源池,提升了私有云资源交付的效率。 2019年12月,微众研发了一套统一的通用的运维服务,这套服务收敛过去各式各样的运维工具,并且增加了金融级的安全管理,优化了K8s执行命令的性能问题。 2020年年初,启动了全量应用容器化项目,现在已经有超过一半的实例跑在了容器上。其中就包括我们的核心金融系统。 2020年年中,平台开始了2.0的迭代,包括定制化Harbor、应用画像、通用Operator API等特性。 未来微众在容器化上小小的积累通过开源的方式贡献给社区。 下面部分我们介绍一下容器化实践中遇到的问题和解决方案。 首先

分布式锁优化

独自空忆成欢 提交于 2021-01-12 07:04:00
首先,我们一起来看看这个问题的背景? 前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题: 假如下单时,用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景? 他说他当时没答上来,因为没做过没什么思路。其实我当时听到这个面试题心里也觉得有点意思,因为如果是我来面试候选人的话,应该会给的范围更大一些。 比如,让面试的同学聊一聊电商高并发秒杀场景下的库存超卖解决方案,各种方案的优缺点以及实践,进而聊到分布式锁这个话题。 因为库存超卖问题是有很多种技术解决方案的,比如悲观锁,分布式锁,乐观锁,队列串行化,Redis原子操作,等等吧。 但是既然那个面试官兄弟限定死了用分布式锁来解决库存超卖,我估计就是想问一个点:在高并发场景下如何优化分布式锁的并发性能。 我觉得,面试官提问的角度还是可以接受的,因为在实际落地生产的时候,分布式锁这个东西保证了数据的准确性,但是他天然并发能力有点弱。 刚好我之前在自己项目的其他场景下,确实是做过高并发场景下的分布式锁优化方案,因此正好是借着这个朋友的面试题,把分布式锁的高并发优化思路,给大家来聊一聊。 库存超卖现象是怎么产生的? 先来看看如果不用分布式锁,所谓的电商库存超卖是啥意思?大家看看下面的图: 这个图,其实很清晰了,假设订单系统部署两台机器上

Redis主从备份&哨兵设置

二次信任 提交于 2021-01-12 06:54:20
Redis 主从备份,哨兵设置 环境 Centos 7,redis 4.0.6 三个centos 7实例 节点 IP 端口 redis-master 172.31.193.221 6379 redis-slave 172.31.193.222 6379 redis-LBS 172.31.193.224 6379 redis-sentinel-master 172.31.193.221 26379 redis-sentinel-slave 172.31.193.222 26379 redis-sentinel-LBS 172.31.193.224 26379 1.将redis解压到目录(/bak/soft/) tar -zxvf 压缩包名 解压目录 2.创建日志和数据恢复目录 mkdir -p /bak/soft/logs/redis mkdir -p /bak/soft/cdata/redis mkdir -p /bak/soft/logs/redis-sentinel mkdir -p /bak/soft/cdata/redis-sentinel 3.配置redis-master.conf bind 127.0.0.1 172.31.193.221 daemonize yes masterauth "ADMINadmin123" requirepass

Windows10+Docker搭建分布式Redis集群(SSH服务镜像)(二)

情到浓时终转凉″ 提交于 2021-01-12 05:42:46
前言:上篇文章我们搭建好了Docker,下面我们开始使用Docker创建镜像,Docker命令就不介绍了。这里宿主是Windows10,cmd的管理和后期文件的复制不是很方便,将创建支持SSH的CentOs镜像。 1、启动Docker服务 运行我们安装好的Docker for Windows,这里我关闭了开机启动(太耗性能) 2、下载Docker镜像-CentOs 版本根据实际情况选择,这里我直接下载默认版本 docker pull centos 镜像下载完毕(此时我们只是加载完成了一个镜像,还没有创建容器) 3、创建并启动CentOs的Docker容器 docker run -it --name=cenotsSsh centos /bin/bash --name=【容器的名称】 镜像的NAMES 正常启动完成会进入 4、升级下系统 yum -y update 5、安装SSH Server(openssh-server) yum install -y openssh-server 6、编辑配置SSH配置文件 /etc/ssh/sshd_config,关闭密码的安全验证UsePAM “no” sed -i " s/UsePAM.*/UsePAM no/g " /etc/ssh/sshd_config 7、生成秘钥对,这步骤可以省略... ssh-keygen -t rsa -b

Redis Server installation FAQs

ε祈祈猫儿з 提交于 2021-01-12 04:20:35
OS: CentOS 7 Minimal (0) open files Q: Increased maximum number of open files to 10032 (it was originally set to 1024). A: $ulimit - a $ vi /etc/systemd/system/redis.service In the "[Service]" unit, add the following: LimitNOFILE= 10032 (1) somaxconn Q: WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. A: $vi /etc/sysctl.conf net.core.somaxconn= 1024 (2) overcommit_memory Q: WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1'

Java连接Redis测试

試著忘記壹切 提交于 2021-01-12 02:00:58
用eclipse新建一个Maven工程,在pom.xml文件里面,引入redis和junit的依赖。 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.comtop.cn</groupId> <artifactId>JavaRedis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>JavaRedis</name> <description>java连接redis例子</description> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>

面试经验

Deadly 提交于 2021-01-11 11:11:35
面试经验 1, 外在形象 :阳光大男孩,活泼小女孩,ps照片形象佳。 2, 投简历时间 :早上8-10点。 3, 简历突出重点 : 软技巧– 责任描述: 业务沟通与建模,技术选型,算法与数据结构实现,环境搭建与机器部署,前后端分离开发,架构设计,任务分配,数据库建模,jvm调优,sql优化, nuix问题解决与维护,利用awx集群利用sql实时分析和hive离线分析,采用python进行通用框架设计辅助分析,进行公司shell脚本的优化和python代码优化, 改善公司数据的吞吐量,mysql优化 介绍一下这个项目 : 客户,预算,几个版本,第几期,多长时间,大概业务 , 业务名词 :重点准备几个比如房地产的备案,验证审批环节 技术架构 :软件架构,硬件架构。多台服务器,哪些服务,多少台服务器跑缓存,多少台服务器跑数据库,每个服务器配置linux,cpu核数,内存。(与jvm调优相关) 项目有什么地方可以改进 :以前比较老,现在用这些技术可以改进(新的技术,新的架构) 多大规模 (多少行代码,多少张表,你的模块的表结构,表里有多少字段,为什么这么设计), 多少人参与,分别是哪些人,我在其中担任的角色是什么 :多少前端,开发,测试。。开发,架构 我主要负责哪些部分 :哪些模块,业务,出彩的地方 数据量,并发量多大。我负责的点说清楚,每天数据量,并发量(QPS,TPS,日活量(压测体现