Redis
文章平均质量分 89
Redis学习
、楽.
放弃很容易,但坚持一定很酷!
展开
-
宕机了,Redis 如何避免数据丢失?
宕机了,Redis 如何避免数据丢失?采用AOF和RDB结合的方式来处理该问题。原创 2023-02-19 23:39:59 · 1992 阅读 · 0 评论 -
Redis 项目实战 —— 抽奖大转盘
1. 项目介绍这是一个基于Spring boot + Mybatis Plus + Redis 的简单案例。主要是将活动内容、奖品信息、记录信息等缓存到Redis中,然后所有的抽奖过程全部从Redis中做数据的操作。大致内容很简单,具体操作下面慢慢分析。2. 项目演示话不多说,首先上图看看项目效果,如果觉得还行的话咱们就来看看他具体是怎么实现的。3. 表结构该项目包含以下四张表,分别是活动表、奖项表、奖品表以及中奖记录表。具体的SQL会在文末给出。4. 项目搭建咱们首先先搭建一个标准原创 2021-12-29 22:16:58 · 7789 阅读 · 15 评论 -
Redis集群搭建及节点扩容实战
在生产环境,Redis如果是单节点会存在单点故障,所以一般都是集群环境,所以我们一会先搭建集群,再在Redis集群环境中实现Redis缓存高级操作。1. 集群搭建1.1 Redis集群原理在做Redis集群前,我们先了解一下Redis集群原理:1:无论对Redis执行增加、删除、查询操作,都会操作一个key2:无论什么key,经过CRC16算法取模,结果都在0-16383之间,这16384个值被称为哈希槽3:如果我们现在有一个Redis集群,集群有3个节点,会为每个节点分配一定哈希槽 Red原创 2021-12-19 15:52:29 · 1837 阅读 · 0 评论 -
Redis Cluster 集群详解
Redis 分布式扩展之 Redis Cluster 方案主从切换的过程中会丢失数据,因为只有一个 master,只能单点写,没有解决水平扩容的问题。而且每个节点都保存了所有数据,一个是内存的占用率较高,另外就是如果进行数据恢复时,非常慢。而且数据量过大对数据 IO 操作的性能也会有影响。所以我们同样也有对 Redis 数据分片的需求,所谓分片就是把一份大数据拆分成多份小数据,在 3.0 之前,我们只能通过构建多个 redis 主从节点集群,把不同业务数据拆分到不冉的集群中,这种方式在业务层需要有大量的原创 2021-11-28 14:22:05 · 13306 阅读 · 0 评论 -
Redis——Sentinel哨兵机制详解
Master 自动选举之 Sentinel 哨兵机制在前面讲的 master/slave 模式,在一个典型的一主多从的系统中,slave 在整个体系中起到了数据冗余备份和读写分离的作用。当 master 遇到异常终端后,开发者可以通过手动方式选择一个 slave 数据库来升级到 master,使得系统能够继续提供服务。然后这个过程需要人工干预,比较麻烦; redis 并没有提供自动 master 选举功能,而是需要借助一个哨兵来进行监控。1. 什么是哨兵顾名思义,哨兵的作用就是监控 Redis 系统的原创 2021-11-28 11:57:57 · 606 阅读 · 0 评论 -
Redis搭建主从复制实现高可用
高可用 HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是 100%。如果系统每运行 100 个时间单位,会有 1 个时间单位无法提供服务,我们说系统的可用性是 99%。很多公司的高可用目标是 4 个 9,也就是 99.99%,这就意味着,系统的年停机时间为 8.76 个小时。那么如何保证系统的高可用呢首先,在整个架构的每个节点中,不允许存在单点问题,因为单点一定是高可用最大原创 2021-11-27 23:50:50 · 1397 阅读 · 0 评论 -
Redis持久化机制详解
Redis 的强劲性能很大程度上是由于它所有的数据都存储在内存中,当然如果 redis 重启或者服务器故障导致 redis 重启,所有存储在内存中的数据就会丢失。但是在某些情况下,我们希望 Redis 在重启后能够保证数据不会丢失。将 redis 作为 nosql 数据库使用。将 Redis 作为高效缓存服务器,缓存被击穿后对后端数据库层面的瞬时压力是特别大的,所有缓存同时失效可能会导致雪崩。这时我们希望 Redis 能将数据从内存中以某种形式同步到硬盘上,使得重启后可以根据硬盘中的记录来恢复数据原创 2021-11-27 15:20:24 · 866 阅读 · 1 评论 -
Redis内存回收策略
Redis内存回收策略很多同学了解了Redis的好处之后,于是把任何数据都往Redis中放,如果使用不合理很容易导致数据超过Redis的内存,这种情况会出现什么问题呢?Redis中有很多无效的缓存,这些缓存数据会降低数据IO的性能,因为不同的数据类型时间复杂度算法不同,数据越多可能会造成性能下降。随着系统的运行,redis的数据越来越多,会导致物理内存不足。通过使用虚拟内存(VM),将很少访问的数据交换到磁盘上,腾出内存空间的方法来解决物理内存不足的情况。虽然能够解决物理内存不足导致的问题,但原创 2021-11-26 13:59:40 · 1482 阅读 · 0 评论 -
Redis高性能通信原理详解
我们一直说 Redis 的性能很快,那为什么快?Redis 为了达到性能最大化,做了哪些方面的优化呢?在之前的文章中,我们已经从数据结构层面分析了redis性能高的一方面原因。在目前的 k-v 数据库的技术选型中,Redis 几乎是首选的用来实现高性能缓存的方案,它的性能有多快呢?根据官方的基准测试数据,一台普通硬件配置的 Linux 机器上运行单个 Redis 实例,处理简单命令(O (n) 或者 O(logn)),QPS 可以达到 8W,如果使用 pipeline 批处理功能,QPS 最高可以达到原创 2021-11-26 13:23:01 · 767 阅读 · 0 评论 -
时间轮机制在 Redisson 分布式锁中的实际应用以及时间轮源码分析
Redisson中的时间轮机制本篇文章主要基于 Redisson 中实现的分布式锁机制继续进行展开,分析 Redisson 中的时间轮机制。在前面分析的 Redisson 的分布式锁实现中,有一个 Watch Dog 机制来对锁键进行续约,代码如下:private void renewExpiration() { RedissonBaseLock.ExpirationEntry ee = (RedissonBaseLock.ExpirationEntry)EXPIRATION_RENEWAL_原创 2021-11-24 16:53:43 · 1037 阅读 · 0 评论 -
Redis中的lua脚本
Lua 是一个高效的轻量级脚本语言(和 JavaScript 类似),用标准 C 语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 在葡萄牙语中是 “月亮” 的意思,它的 logo 形式卫星,寓意是 Lua 是一个 “卫星语言”,能够方便地嵌入到其他语言中使用;其实在很多常见的框架中,都有嵌入 Lua 脚本的功能,比如 OpenResty、Redis 等。使用 Lua 脚本的好处:减少网络开销,在 Lua 脚本中可以把多个命令放在同一个脚本中原创 2021-11-24 16:10:19 · 1100 阅读 · 0 评论 -
Redisson 分布式锁详解
简单使用下面通过 Redisson 框架封装的分布式锁机制,来演示一下分布式锁的实现。引入依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.16.0</version></dependency>测试public class RedisL原创 2021-11-24 15:38:38 · 1555 阅读 · 0 评论 -
Redis使用过程中常见的问题——缓存雪崩、缓存穿透、数据一致性等
Redis 使用起来很简单,但是在实际应用过程中,一定会碰到一些比较麻烦的问题,常见的问题有redis 和数据库数据的一致性缓存雪崩缓存穿透热点数据发现下面逐一来分析这些问题的原理及解决方案。数据一致性针对读多写少的高并发场景,我们可以使用缓存来提升查询速度。当我们使用 Redis 作为缓存的时候,一般流程如下图所示。如果数据在 Redis 存在,应用就可以直接从 Redis 拿到数据,不用访问数据库。如果 Redis 里面没有,先到数据库查询,然后写入到 Redis,再返回给应用。原创 2021-11-24 14:25:31 · 508 阅读 · 0 评论 -
Redis客户端基础使用——Jedis、Lettuce、Redisson
在我们实际开发过程中,官方推荐了以下三种客户端供我们使用:配置作用Jedis一个极其小而健全的redis java客户端lettuce高级Redis客户端线程安全同步,异步,和反应性使用。支持集群,哨兵,流水线和编解码器。Redisson分布式和可扩展的Java数据结构之上的Redis服务器JedisJedis 是我们最熟悉和最常用的客户端。轻量,简洁,便于集成和改造。简单使用引入依赖<dependency> <groupI原创 2021-11-24 13:19:06 · 1071 阅读 · 0 评论 -
如何手写一个Redis客户端呢?
我们要在 Java 中操作 Redis,怎么做呢?首先我们先来了解一下 Redis Serialization Protocol (Redis 序列化协议),这个是 Redis 提供的一种,客户端和 Redis 服务端通信传输的编码协议,服务端收到消息后,会基于这个约定编码进行解码。测试使用的redis是安装在虚拟机中的。打开 Wireshark 工具,对 VMnet8 这个网络进行抓包增加过滤条件ip.dst_host==192.168.221.128 and tcp.port in {6原创 2021-11-24 11:36:02 · 560 阅读 · 0 评论 -
Spring boot 集成 Redis 简单使用
该篇文章记录如何在spring boot项目中使用 redis 。首先自行创建spring boot项目,然后引入相关依赖后修改相应配置即可使用。以下只简单使用了get和set方法,具体其他使用可以查看Lettuce的具体使用方法。项目地址放在文末。官方文档:https://lettuce.io/core/release/reference/index.html简单使用引入相关依赖<dependency> <groupId>org.springframewo原创 2021-11-24 10:31:23 · 182 阅读 · 0 评论 -
Redis基础——数据类型详解
命令参考:http://doc.redisfans.com/简介Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数.原创 2021-11-24 00:05:54 · 984 阅读 · 0 评论 -
Linux 安装 Redis
安装gcc依赖由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装。yum install -y gcc 下载并解压安装包可以在官网下载安装包后在上传到我们的服务器中或者直接用命令下载并解压。wget http://download.redis.io/releases/redis-5.0.3.tar.gztar -zxvf redis-5.0.3.tar.gzcd切换到redis解压目录下,执行编译cd redi原创 2021-10-13 14:24:44 · 157 阅读 · 1 评论