
redis
文章平均质量分 95
varyall
这个作者很懒,什么都没留下…
展开
-
set nx px
1 介绍这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。2 分布式锁2.1 什么是分布式锁?分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。转载 2021-06-14 22:33:37 · 787 阅读 · 0 评论 -
COW奶牛!Copy On Write机制了解一下
前言只有光头才能变强在读《Redis设计与实现》关于哈希表扩容的时候,发现这么一段话:执行BGSAVE命令或者BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率,所以在子进程存在期间,服务器会提高负载因子的阈值,从而避免在子进程存在期间进行哈希表扩展操作,避免不必要的内存写入操作,最大限度地节约内存。触及到知识的盲区了,于是就去搜了一下copy-on-write写时复制这个转载 2020-06-22 15:05:49 · 559 阅读 · 0 评论 -
redis过期key回调代码
import com.alibaba.fastjson.JSONObject;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;.转载 2020-06-11 10:59:02 · 964 阅读 · 0 评论 -
Jedis和RedisTemplate有何区别?
Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache ...转载 2018-10-28 18:46:20 · 23817 阅读 · 2 评论 -
Redis的embstr与raw编码方式不再以39字节为界了!
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/XiyouLinux_Kangyijie/article/details/78045385引言从“中国软件杯”回来之后,一直对项目中没用到Redis以至于在存储上坑爹而耿耿于怀,心想一定要学一下Redis然后把之前的项目再改进一下,一边学习基本使用,一边对照《Redis设计与实现》深入,不禁感...转载 2018-08-27 17:19:25 · 4727 阅读 · 0 评论 -
redis4支持内存碎片清理功能使用
最近看到redis4支持内存碎片清理了, 之前一直期待有这么一个功能, 因为之前遇到内存碎片的解决办法就是重启, 现在终于有了优雅的解决方案.\^o^/, 这个功能其实oranagra 在2017年1月1日已经提交pr了, 相关地址: https://github.com/antirez/redis/pull/3720版本说明: Redis 4.0-RC3 以上版本才支持的 需要使用je...转载 2018-08-08 16:39:18 · 5622 阅读 · 0 评论 -
关于redis源码的内存分配,jemalloc,tcmalloc,libc
jemalloc是facebook推出的,https://github.com/jemalloc/jemalloctcmalloc是Google推出的,https://github.com/gperftools/gperftoolslibc是标准的内存分配库malloc和free 我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配...转载 2018-08-08 16:37:05 · 576 阅读 · 0 评论 -
分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令
文章主目录Redis数据类型 Redis常用命令 参考文档Redis数据类型与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String、List、Hash、Set和Sorted Set。Redis数据类型内存结构分析Redis内部使用一个redisObject对象来表示所有的key和valu...转载 2018-08-08 16:28:37 · 266 阅读 · 0 评论 -
redis主从复制和集群实现原理
redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slaveof 192.168.33.130 6379主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。redis复制过程如下:1、slave serv...转载 2018-08-01 09:27:07 · 273 阅读 · 0 评论 -
秒杀场景下MySQL的低效原因和改进
在「中国数据库技术大会」上,淘宝分享了「秒杀场景下MySQL的低效」,详细分析了秒杀的技术难点及改进措施,简而言之,主要就是在高并发事务请求的情况下,数据库性能由于死锁检测等因素直线下降,在这种场景下,单纯的关闭死锁检测虽然可以提升一定的性能,但这顶多是治标而已,如何治本?淘宝丁奇:秒杀场景下mysql的低效的原因和改进淘宝给出来两个改进方法请求排队:如果请求一股脑的涌入数据库,势必会...转载 2018-08-09 11:11:12 · 943 阅读 · 0 评论 -
redis的优缺点
优点:1 读写性能优异2 支持数据持久化,支持AOF和RDB两种持久化方式3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。4 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。 缺点:1 Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失...转载 2018-07-30 17:17:00 · 564 阅读 · 0 评论 -
redis 优缺点 使用场景
1. 使用redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2) 支持丰富数据类型,支持string,list,set,sorted set,hash(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4) 丰富的特性:可用于缓存,消息,按key设置过期...转载 2018-07-30 16:17:40 · 846 阅读 · 0 评论 -
10个常见的Redis面试"刁难"问题
导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。作者简介:钱文品(老钱),互联网分布式高并发技术十年老兵,目前任掌阅科技资深后端工程师。熟练使用 Java、Python、Golang 等多种计算机语言,开发过游戏,制作过网站,写过消息推送系统和MySQL 中间件,实现过...转载 2018-07-25 16:22:46 · 13946 阅读 · 6 评论 -
redis sentinel搭建以及在jedis中使用
一、redis主从搭建1、搭建redis master1>redis安装mkdir -p /usr/local/webserver/redis //安装目录cd /usr/local/webserver/rediswget http://download.redis.io/redis-stable.tar.gz //最新稳定版tar xzf redis-stable.tar.gzc...转载 2018-05-30 21:12:24 · 551 阅读 · 0 评论 -
秒杀设计
1、前端CDN缓存静态页,css,jd,image等2、nginx限流对于同一ip一定时间内的访问次数3、三个redis标志3.1 秒杀是否结束标志3.2 秒杀参与list3.3 秒杀资格list3.4 秒杀入队总数4、每次按照秒杀用户:秒杀商品数 100:1比例放入用户,秒杀商品,然后进入mq排队,然后后续mq消费时候,记录抢到资格的用户,同时写入redis秒杀资格l...转载 2018-08-22 14:07:46 · 542 阅读 · 0 评论 -
关于Redis数据过期策略
1、Redis中key的的过期时间通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除 1 ...转载 2018-09-08 13:03:37 · 542 阅读 · 0 评论 -
从redis为什么单线程还那么快到epoll的设计原理
文章目录redis为什么快上下文切换为什么采用单线程redis的I/O多路复用epoll与select/poll区别select/poll的几大缺点用户态拷贝到内核态epoll IO多路复用模型实现机制epoll 优势详解底层实现总结redis为什么快Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+...转载 2019-04-29 15:11:29 · 1283 阅读 · 0 评论 -
redis异步主从数据复制和集群脑裂解决方案
对于redis主从架构,master接受到请求之后执行完会立刻返回给client,然后会异步复制给其他master,此时会出现两种问题:当集群节点间网络或其他问题导致异步复制延时很高,如果此时master宕机了,毫无疑问会丢失延时的这段时间的数据当网络分区变化导致master和slave节点之间无法正常通信时,sentinel哨兵集群会选举slave为master,此时与之前master连接...转载 2019-03-26 14:49:41 · 767 阅读 · 0 评论 -
set nx px
我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。如果是,获取锁成功。当被监听的节点释放了锁(也就是被删除),会通知当前节点。然后当前节点再尝试获取锁,如...转载 2019-03-22 21:31:16 · 10456 阅读 · 1 评论 -
租约锁机制
背景和介绍缓存是计算机里广泛使用的一种技术,对降低读取延迟、网络流量和服务器负载都非常有效,但也带来了一致性(Consistency)的问题。所谓一致就是客户端总能读到最新的数据,使用缓存后有可能服务器端的数据已经被修改,但客户端仍然从缓存中读取陈旧的数据。为了保证一致性,有两种常见的解决办法,第一种是轮询(Polling),即每次读取数据时都先询问服务器数据是不是最新的,如果不是就从服务器传...转载 2019-03-13 19:43:41 · 413 阅读 · 0 评论 -
Redis的三个框架:Jedis,Redisson,Lettuce
Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.htmlredisson 官网地址:https://redisson.org/redisson git项目地址:https://github.com/redisson/redissonlettuce 官网地址:https://...转载 2019-03-25 00:47:28 · 582 阅读 · 1 评论 -
使用Redis作为分布式锁的一些注意点
Redis实现分布式锁最近看分布式锁的过程中看到一篇不错的文章,特地的加工一番自己的理解:Redis分布式锁实现的三个核心要素:1.加锁最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名,value为当前线程的线程ID。比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_ID” 。而value设置成什么呢?我们可以姑且设置成1。加锁...转载 2019-03-24 23:41:05 · 1308 阅读 · 0 评论 -
租约---fencing机制 kafka的epoch
redis锁超时锁超时被释放不是很正常吗。。 因为我没有用过redis,所以对于楼上说的超时如何避免我不知道。。但是从分布式系统的角度来分析这个问题,锁其实就等于租约,谁从redis得到了租约,谁就是集群的leader,执行一些follower不能做的操作,但是呢,leader总是会由于种种问题(网络、gc)无法及时续租,导致超时,这时候另外一个follower进而得到锁,导致集群双主。...转载 2019-03-24 23:23:55 · 1294 阅读 · 0 评论 -
redis集群主流架构方案分析
阿伊土鳖小码农 2017-02-10 09:29Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量。随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资源是有限的,要动态地扩容缩容,就需要用到redis集群。redis集群的架构方案经历了一系列演变和改良的过程,本文介绍了四种主流的redis架构...转载 2018-12-20 21:11:51 · 467 阅读 · 0 评论 -
大厂们的 redis 集群方案
内容目录:类 codis 架构 基于官方 redis cluster 的方案redis 集群方案主要有两类,一是使用类 codis 的架构,按组划分,实例之间互相独立;另一套是基于官方的 redis cluster 的方案;下面分别聊聊这两种方案;类 codis 架构这套架构的特点:分片算法:基于 slot hash桶; 分片实例之间相互独立,每组 一个master 实...转载 2018-12-20 14:37:01 · 416 阅读 · 0 评论 -
如何处理缓存失效、缓存穿透、缓存并发等问题
缓存失效: 引起这个原因的主要因素是高并发下,我们一般设定一个缓存的过期时间时,可能有一些会设置5分钟啊,10分钟这些;并发很高时可能会出在某一个时间同时生成了很多的缓存,并且过期时间在同一时刻,这个时候就可能引发——当过期时间到后,这些缓存同时失效,请求全部转发到DB,DB可能会压力过重。 处理方法: 一个简单方案就是将缓存失效时间分散开,不要所以缓存时间长度都设置成5分钟...转载 2018-09-16 21:36:57 · 666 阅读 · 0 评论 -
Redis高可用方案-哨兵与集群
Redis高可用方案一.名词解释二.主从复制 Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不可达的情况下,从节点可以作为后备顶上来,并且可以保障数据尽量不丢失(主从复制可以保障最终一致性)。第二,从节点可以扩展主节点的读能力,一旦主节点不能支持大规模并发量的读操作,从节点可以在一定程度上分担主节点的压力。 主从复制面临的问题: 1.当主节点...转载 2018-05-26 00:03:00 · 10156 阅读 · 0 评论 -
Redis 基数统计:HyperLogLog 小内存大用处
我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。这里我们就来简单介绍下HyperLogLog结构。先说用处:这个结构可以非常省内存的去统计各种计数,比如注册ip数、每日访问IP数、页面实时UV(PV肯定字符串就搞定了)、在线用户数等。这里看到所有的用处...转载 2018-05-08 19:11:33 · 864 阅读 · 0 评论 -
Redis双链表实现安全队列
场景: task + bak 双链表完成安全队列Task列表 bak列表 业务逻辑:1:Rpoplpush task bak2:接收返回值,并做业务处理3:如果成功,rpop bak 清除任务. 如不成功,下次从bak表里取任务https://blog.youkuaiyun.com/qq_25551295/article/details/4...转载 2018-04-16 15:54:48 · 424 阅读 · 0 评论 -
redis数据类型List的安全队列和不安全队列
在学习RPOPLPUSH命令的时候,官方文档中有提到安全队列和不安全的队列,一开始没有看懂,现在理解了做个笔记。一般情况下,我们可以借助List来实现消息队列,比如一个客户端通过命令LPUSH(BLPUSH)把消息入队,另一个客户端通过命令RPOP(BRPOP)获取消息。这种方式实现的队列是不安全的。为什么是不安全的呢?因为RPOP命令的特性:会移除list的队尾元素(消息),并将这个元素(消息)...转载 2018-04-16 15:15:08 · 1608 阅读 · 0 评论 -
Redis Cluster 集群一致性原理及slot迁移测试
参考:Redis Cluster原理与管理;Inconsistent slot mapping;Redis中文文档集群信息一致性问题主从和slot的一致性是由epoch来管理的. epoch就像Raft中的term, 但仅仅是像. 每个节点有一个自己独特的epoch和整个集群的epoch, 为简化下面都称为node epoch和cluster epoch. node epoch一直递增, 其表示某...转载 2018-04-10 17:09:05 · 700 阅读 · 0 评论 -
redis-cluster集群扩容以及扩容client读写数据影响的探究
1<br>redis-cluster集群扩容以及扩容client读写数据影响的探究 一直以来,从来只是对codis做过slot的动态迁移(同扩容)而且也只是线下环境,而没有对线上的redis-cluster做过扩容和迁移。早就想有空测试一下却一直没有实际去做,然而就在今天收到了产品部的需求,要对线上某个业务线的redis-cluster做扩容。。。 这也正印证佛家那就话,你结下的...转载 2018-04-10 00:54:29 · 2138 阅读 · 0 评论 -
Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩
Redis Cluster 集群伸缩1. 伸缩原理Redis提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以对下线节点进行缩容。我们在Redis Cluster 介绍与搭建这篇文章中搭建了一个三主三从的Redis集群(如下图所示)。在搭建 Redis Cluster 通信流程剖析这篇博客中根据源码详细剖析了搭建集群的流程。本篇博客要讲的是,Redis集...转载 2018-04-09 23:24:48 · 236 阅读 · 0 评论 -
redis的 rdb 和 aof 持久化的区别
redis的 rdb 和 aof 持久化的区别url: http://ptc.35.com/?p=275aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。rdb的特性如下:Code:fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。save, shutdown转载 2017-12-13 19:41:15 · 220 阅读 · 0 评论 -
redis中的事务、lua脚本和管道的使用场景
事务redis中的事务并不像mysql中那么完美,只是简单的保证了原子性。redis中提供了四个命令来实现事务,MULTI:类似于mysql中的BEGIN;EXEC:类似于COMMIT;DISCARD类似于ROLLBACK;WATCH则是用于来实现mysql中类似锁的功能。具体的使用方法非常简单,例如:127.0.0.1:6379> multiOK127.0.0.1:6379> i转载 2017-12-04 23:48:58 · 356 阅读 · 0 评论 -
Redis3.0的主从、集群高可用
1. 安装Redis3.0yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl mkdir -p /usr/local/src/rediscd /usr/local/src/redisw转载 2017-12-20 19:02:13 · 407 阅读 · 0 评论 -
redis集群原理
redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了。 官方的一个简单测试: 测试完成了50个并发执行100000个请求。 设置和获取的值是一个256字节字符串。 结果:读的速度是110000次/s,写的速度是81000次/s 在这么快的读写速度下,对于一般程序来说足够用了,转载 2017-12-20 16:53:14 · 292 阅读 · 0 评论 -
Redis高级特性:虚拟内存的使用技巧
首先说明下redis的虚拟内存与操作系统的虚拟内存不是一码事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。 除了可以将数据分割到多个redis server外。另外的能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换的磁盘上。如果我们的存储的数转载 2015-11-07 19:47:06 · 509 阅读 · 0 评论 -
Redis内存使用优化与存储
Redis常用数据类型Redis最为常用的数据类型主要有以下五种:StringHashListSetSorted set在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject转载 2015-11-07 19:36:59 · 476 阅读 · 0 评论 -
redis实现可靠的队列
用redis brpop 或 blpop命令可以实现可靠的队列。 其命令格式如: brpop|blpop list1 list2 list3 ... timeout 参数: list 列表集 timeout 阻塞时间,当 timeout 为 0 是表示阻塞时间无限制。 返回值: 返回一个存在于 list1 或 list2 或 list...转载 2018-04-16 15:55:53 · 885 阅读 · 0 评论