redis
文章平均质量分 80
乐乐Java路漫漫
热衷于互联网JAVA开发,对新技术的探索孜孜不倦,对问题的研究废寝忘食,希望大家一起探索
展开
-
Redis - RDB、AOF和复制时对过期键的处理
在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。举个例子,如果数据库中包含三个键k1、k2、k3,并且k2已经过期,那么当执行SAVE命令或者BGSAVE命令时,程序只会将k1和k3的数据保存到RDB文件中,而k2则会被忽略。因此,数据库中包含过期键不会对生成新的RDB文件造成影响。rdb.c 的rdbsave()源码/* Iterate this DB writing every entry原创 2021-07-28 08:16:00 · 702 阅读 · 0 评论 -
分布式服务接口的幂等性如何设计(比如不能重复扣款)?
判断redis中是否有订单记录,有则返回已支付完成查询数据库判断没有订单,先插入订单,支付中【单号是唯一索引】有订单,判断是支付中,进入下一步如果是完成,则返回开启事务,加悲观锁:再次判断状态是支付中:然后下一步,不然返回支付完成支付完成,修改状态为支付完成提交redis:设置为已支付set order_id payd...原创 2021-07-05 15:20:34 · 166 阅读 · 0 评论 -
Redis IO多路复用技术以及epoll实现原理
系列文章目录文章目录系列文章目录前言1. redis是基于缓存的2. Redis为什么这么快?3.IO多路复用技术4.Redis线程模型4.1 I/O多路复用程序、文件事件分派器前言redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。1. redis是基于缓存的官方文档介绍说,Redis的操作都是基于内存的,CPU不是 Redis性能瓶颈,,Redis的瓶颈是机器内存和网络带宽。Reds是C语言原创 2021-01-07 20:39:02 · 854 阅读 · 0 评论 -
测试redis管道(pipeline)性能 碾压
@BeforeEach public void start() { start = System.currentTimeMillis(); System.out.println("@Before"); } /** * 无pipeline 耗时:843ms */ @Test public void testNoPipeline() { //连接redis服务器,192.168.0.100:6...原创 2020-09-01 16:28:52 · 645 阅读 · 0 评论 -
redis info memory参数详解
127.0.0.1:6379> info memory# Memoryused_memory:12990064used_memory_human:12.39Mused_memory_rss:749568used_memory_rss_human:732.00Kused_memory_peak:20294512used_memory_peak_human:19.35Mused_memory_peak_perc:64.01%used_memory_overhead:1031022use原创 2020-05-10 16:25:09 · 2140 阅读 · 0 评论 -
redis 过期策略和对象引用
(1) LRUlru记录的是对象最后一次被命令程序访问的时间,占据的比特数不同的版本有所不同(如4.0版本占24比特,2.6版本占22比特)。通过对比lru时间与当前时间,可以计算某个对象的闲置时间;object idletime命令可以显示该闲置时间(单位是秒)。object idletime命令的一个特殊之处在于它不改变对象的lru值。 lru值除了通过object idletim...原创 2020-04-05 15:30:53 · 399 阅读 · 0 评论 -
redisobject详解
前面说到,Redis对象有5种类型;无论是哪种类型,Redis都不会直接存储,而是通过redisObject对象进行存储。redisObject对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisObject支持,下面将通过redisObject的结构来说明它是如何起作用的。redisObject的定义如下(列出了与保存数据有关的三个属性):typ...原创 2020-04-05 14:52:36 · 2776 阅读 · 0 评论 -
redis 内存分配器jemalloc
Redis在编译时便会指定内存分配器;内存分配器可以是 libc 、jemalloc或者tcmalloc,默认是jemalloc。jemalloc作为Redis的默认内存分配器,在减小内存碎片方面做的相对比较好。jemalloc在64位系统中,将内存空间划分为小、大、巨大三个范围;每个范围内又划分了许多小的内存块单位;当Redis存储数据时,会选择大小最合适的内存块进行存储。jemall...原创 2020-04-05 11:15:42 · 3190 阅读 · 1 评论 -
redis结构概述
Redis是一个K-V NoSQL非关系型数据库。Redis有五种数据类型,分别string类、hash类型、list类型、set类型、zset类型。这五种类型,都是针对K-V中的V进行设计的。关于Redis数据存储的细节,涉及到内存分配器(如jemalloc)、简单动态字符串(SDS)、5种对象类型及内部编码、redisObject(1)dictEntry:Redis是K...原创 2020-04-05 11:11:58 · 185 阅读 · 0 评论 -
redis秒杀代码案例
用redis实现的秒杀代码案例public class JedisInstance { public synchronized static Jedis getSingleJedis() { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.auth("123456"); return j...原创 2020-03-23 20:50:47 · 904 阅读 · 0 评论 -
redis全量和部分主从同步原理
redis主从同步分为全量同步和增量同步只有从机第一次连接上主机是全量同步断线重连有可能触发全量同步也有可能是增量同步( master 判断 runid 是否一致)除此之外的情况都是增量同步。全量同步Redis全量同步分为3部分:同步快照阶段:Master创建并发送快照rdb给slaver,slaver载入并解析rdb快照,Master同时将次阶段所产生的新的写命令存储到缓冲区。...原创 2020-03-23 11:13:00 · 364 阅读 · 0 评论 -
redis主从和集群配置(sentinel)
开始1.集群环境2.配置并启动Redis主从集群3.配置sentinel集群并启动4.测试sentinel集群集群环境:一台mac设备,多个端口127.0.0.16379 master7368 slaver6377 slaver2.配置并启动Redis主从集群1.主节点的redis配置文件使用默认的配置文件就可以了,从节点的redis配置文件修改如下:slaveof...原创 2020-03-23 10:29:54 · 364 阅读 · 0 评论 -
设计缓存系统时应该注意的几点问题
1.缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。缓存穿透解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据...原创 2020-03-15 13:16:03 · 378 阅读 · 0 评论 -
分布式锁 Jedis代码实例
分布式锁可靠性条件互斥性:在任意时刻,只有一个客户端能持有锁加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了不会发生死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能枷锁正确的加锁方式public class RedisTool { private static final String LOCK_SUCCESS = "OK"; ...原创 2020-03-15 12:29:13 · 183 阅读 · 0 评论