0

Redis是如何持久化到硬盘的

Redis为什么需要持久化我们在项目中或多或少会用到Redis,Redis主要用作缓存数据库。使用Redis可以大大提升我们程序是性能,使用Redis之所以快的原因之一是Redis的数据是存储在内存中,应用程序访问Redis只需要从内存中读取即可。从内存中读取数据确实能提高访问速度,但是当Redis挂了,内存中的数据就会丢失掉,为了防止数据丢失,我们需要将数据持久化到硬盘中。当Redis挂了,数据已经存储到硬盘中了,Redis重启后,硬盘中的数据就会重新加载到内存中。那么,问题来了。Redis是如何持久化的?两种持久化方式在Redis中提供了两种不同的持久化方式:RDB和AOF。RDB持久化方...

阅读全文>>

0

Redis如何实现分布式锁?

前言如果在一个分布式系统中,我们从数据库中读取一个数据,然后修改保存,这种情况很容易遇到并发问题。因为读取和更新保存不是一个原子操作,在并发时就会导致数据的不正确。这种场景其实并不少见,比如电商秒杀活动,库存数量的更新就会遇到。如果是单机应用,直接使用本地锁就可以避免。如果是分布式应用,本地锁派不上用场,这时就需要引入分布式锁来解决。由此可见分布式锁的目的其实很简单,就是为了保证多台服务器在执行某一段代码时保证只有一台服务器执行。为了保证分布式锁的可用性,至少要确保锁的实现要同时满足以下几点:互斥性。在任何时刻,保证只有一个客户端持有锁。不能出现死锁。如果在一个客户端持有锁的期间,这个客户端崩...

阅读全文>>

0

如何破解缓存穿透和并发?

缓存是我们现在经常使用的技术之一,对于缓存的使用,看似非常简单,其实却蕴含着很多技巧在里面,这些技巧可以帮助我们最大化地发挥缓存的功效,减少因为缓存的使用导致的线上生产事故,那么这些技巧都有哪些,如何使用呢?下面试着从缓存穿透,缓存并发来开展破解之道。缓存穿透流程和危害  在通常情况下,我们在前台是如何使用缓存的呢?我们来看下面这个流程:  当系统接收到一个请求时,请求先从缓存中查找数据,查找数据一般得分两种情况:如果缓存中有数据的话,就直接从缓存中读取数据,然后返回给请求方;如果缓存中没有,那就从数据库中读取数据,然后再更新到缓存中;  以上这种方法可以在一定程度上减少数据库的压力,在并发量...

阅读全文>>

0

跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案

随着云计算十余年的高速发展,作为目前可见的最新阶段,多云正在快步大踏步前进。而多云趋势所带来得数据云间迁移,也逐步常态化。因此, 缓存 Redis 已成为高并发场景下提升数据访问速度的标配。不仅是数据云间迁移,目前大型系统对于缓存强依赖,致使大多数企业都会面临大量并发读写数据时访问速度慢、数据库压力大,以及缓存数据不⾜带来的缓存击穿及雪崩⻛险。其中, Redis 就起到了降低数据库压力,提升数据访问速度的作用。下图是某网站业务的解决访问速度慢的问题,引入缓存Redis提升访问速度的流程:但在 Redis 迁移同步过程中,势必会面临着许多挑战:rdb版本不⼀致导致源 redis dump⽂件在⽬...

阅读全文>>

0

Redis集群实战篇

1. 拉取redis镜像docker pull redis:6.0.92. 配置文件2.1 生成目录用来存放redis的配置文件与持久化文件,日志文件等# 新增目录 mkdir -p /www/redis/redis_001/ && mkdir -p /www/redis/redis_001/data/ # 切换目录 cd /www/redis/redis_001/ vim redis.conf2.2 建立配置文件# 解除限制redis只能本地访问 bind 0.0.0.0 # 默认yes,开启保护模式,限制为本地访问,改成no protected-mode no #...

阅读全文>>

0

redis的五种数据结构和应用场景:微博微信点赞+加购物车等

Redis五种数据结构如下:1.String 字符串类型是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。2.Hash (哈希)是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}3.链表 (List)List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据...

阅读全文>>

0

Redis 之哈希

命令hset key field value 设置值,成功返回1,失败返回0,hash提供了 hsetnx 命令 只有key不存在才会设置成功hget key value 获取值hdel key field [field ...] 删除filed,返回删除成功的个数hlen key 统计field个数hmget key field [field ...] 批量获取field valuehmset key field value [field value ...] 批量设置field valuehexists key field 判断field是否存在,存在返回1,否则返回0hkeys key ...

阅读全文>>

0

Redisson 3.15.0 新特性spinLock和其它

Redisson 3.15.0发布了,带来了Apache Tomcat 10的支持,以及spin lock先看spinLock目前支持四种编程模式,一种原生,一种Async 异步,一种Reactive, 一种RxJava 2看原生的RLock lock = redisson.getSpinLock("myLock"); // traditional lock method lock.lock(); // or acquire lock and automatically unlock it after 10 seconds lock.lock(10, TimeUnit.SECONDS); ...

阅读全文>>

0

可以了,基于Redis和Lua实现分布式令牌桶限流

限流是一个很大的话题,准备把其中的所有限流器都实现一遍,以此也算全都写过了,到时候再用也不至于会心虚,毕竟真实写完成过。本文主要讲述了如何基于 Redis 与 Lua实现分布式令牌桶的限流方案。读前提问我觉得学习任何东西前都应该有自己的反问,这种反问基于标题给你的大概印象。带着问题来看文章,最后应该比盲目的看有收获,先提出几个基础的问题。限流是什么通过某种手段对某个时间段的并发访问请求进行流量限制,一旦流量达到限制阈值则可以拒绝服务,排队或等待,目的是防止系统因大流量或突发流量导致服务不可用或崩溃,是一种确保系统高可用的手段。限流的简单了解限流常见场景对外限流: 电商秒杀(因秒杀业务特性,需要...

阅读全文>>

0

原来大厂的Redis分布式锁都这么设计的

1 本地锁常用的即 synchronize 或 Lock 等 JDK 自带的锁,只能锁住当前进程,仅适用于单体架构服务。 而在分布式多服务实例场景下必须使用分布式锁2 分布式锁2.1 分布式锁的原理厕所占坑理论可同时去一个地方“占坑”:占到,就执行逻辑否则等待,直到释放锁可通过自旋方式自旋“占坑”可以去Redis、DB、任何所有服务都能访问的地方。2.2 分布式锁演进一阶段// 占分布式锁,去redis占坑 Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock", "111"); if(lock) { //加锁成功... 执...

阅读全文>>