![](https://img-blog.csdnimg.cn/20191125185808267.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
缓存
文章平均质量分 74
redis、memcache等缓存
东境物语
这个作者很懒,什么都没留下…
展开
-
Memcached解析
memcached是一个非常有名的高性能分布式缓存系统, 采用memcached作为缓存系统能显著提高系统的性能。原创 2014-09-30 10:27:30 · 733 阅读 · 0 评论 -
一文搞懂Redis架构演化之路
总结一下,我们是如何从 0 到 1,再从 1 到 N 构建一个稳定、高性能的 Redis 集群的,从这之中你可以清晰地看到 Redis 架构演进的整个过程。数据怕丢失:持久化(RDB/AOF)主从副本(副本随时可切)故障手动切换慢:哨兵集群(自动切换)读存在压力:扩容副本(读写分离)写存在压力/容量瓶颈:分片集群分片集群社区方案:Twemproxy、Codis(Redis 节点之间无通信,需要部署哨兵,可横向扩容)分片集群官方方案。转载 2023-07-25 22:01:11 · 124 阅读 · 0 评论 -
把Redis当作队列来用,真的合适吗?
我经常听到很多人讨论,关于「把 Redis 当作队列来用是否合适」的问题。有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。也些人则反对,认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。究竟哪种方案更好呢?这篇文章,我就和你聊一聊把 Redis 当作队列,究竟是否合适这个问题。我会从简单到复杂,一步步带你梳理其中的细节,把这个问题真正的讲清楚。看完这篇文章后,我希望你对这个问题你会有全新的认识。在文章的最后,我还会告诉你关于「技术选型」的思路,文转载 2021-10-27 14:27:47 · 225 阅读 · 0 评论 -
如何处理redis集群中的hot Key
一般对于单实例的redis或者一主一备的redis来说(热点key参考https://mp.csdn.net/postedit/87862837),不需要考虑hot key的问题。但是随着业务量的上升,redis集群也自然而然的会成为一个选择。hot key的概念当使用redis集群来作为缓存的时候,如果在业务上碰到大促,或者正好有一个非常热的帖子的时候,对应的缓存会被频繁访问。而这个缓存...转载 2019-06-17 18:42:10 · 1237 阅读 · 0 评论 -
Redis在京东到家的订单中的使用
背景Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:订单列表在Redis中的存储结构 Redis和DB数据一致性保证 Redis中的分布式锁 缓存防穿透和雪崩订单列表在Redis中的存储结构订单列表数据在缓存中,是以用户的唯一标识作为键,以一个按下单时间倒序的有序集合为值进行存储的。大家都知道Redis的sorted set中每个元素都有一个分数,Redis就是根据这个分数排序的。订单有转载 2020-06-28 21:24:10 · 402 阅读 · 0 评论 -
如何保证缓存(redis)与数据库(MySQL)的一致性
【简介】 对于热点数据(经常被查询,但不经常被修改的数据),我们可以将其放入redis缓存中,以增加查询效率,但需要保证从redis中读取的数据与数据库中存储的数据最终是一致的。本文基于“孤独烟”与“58沈剑”两位的文章,针对一致性的问题进行了汇总总结,两位的原文链接见文末。【前言】 客户端对数据库中的数据主要有两类操作,读(select)与写(DML)。针对放入redis中缓存的热点数据,当客户端想读取的数据在缓存中就直接返回数据,即命中缓存(cache hit),当读取的数据不在缓存内,就转载 2020-06-22 15:32:46 · 12393 阅读 · 1 评论 -
Redis并发竞争key的解决方案详解
1.Redis高并发的问题Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿、缓存雪崩、缓存和数据一致性,以及今天要谈到的缓存并发竞争。这里的并发指的是多个redis的client同时set key引起的并发问题。2.出现并发设置Key的原因Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以Redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对Redis进转载 2020-06-01 16:18:59 · 2186 阅读 · 0 评论 -
JedisCluster 批量操作
Redis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。原生JedisCluster对批量操作的限制是mget mset 必须在一个槽;四种批量优化的方法1、串行 mget在 for 循环中执行一条条的 get; 需要 n 次网络时间;2、串行 IO在客户端对所有 key 做 CR...原创 2019-12-24 11:32:27 · 2456 阅读 · 0 评论 -
redis缓存与数据库一致性问题解决
一、需求起因假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【如下图:db中是新数据,cache中是旧数据】。假设先淘汰缓存,再写数据库:第一步淘汰缓存成功,第二步写数据库失败【如下图:cache中无数据,db中是旧数据】。结论:先淘汰缓存,再写数据库。二、数据不一致原因先操作缓存,在写数据库成...转载 2019-09-19 16:55:05 · 747 阅读 · 0 评论 -
redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照...转载 2019-07-08 17:41:02 · 816 阅读 · 0 评论 -
Redis百亿级Key存储方案
1 需求背景该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperid的人口标签、移动端id(主要是idfa和imei)的人口标签,以及一些黑名单id、ip等数据。在hdfs的帮助下离线存储千亿记录并不困难,然而DMP还需要提供毫秒级的实时查询。由于cookie...转载 2019-06-18 11:19:28 · 259 阅读 · 0 评论 -
Redis中存储亿级键值对
迁移系统时,有时你必须建立一个小脚手架。我们最近不得不这样做:在Instagram上,于遗留原因,我们需要将大约3亿张照片映射到创建它们的用户的ID,以便了解要查询的分片(请参阅有关我们的更多信息)分片设置)。虽然所有客户端和API应用程序都已更新并向我们返回 完整信息,但仍有许多人缓存的旧数据。我们需要一个解决方案:查找键并快速返回值 将数据存在内存中,理想情况下是在EC2高内存类型(17...转载 2019-06-18 11:16:09 · 2098 阅读 · 0 评论 -
如何处理redis集群中hot key和big key
概述redis 集群部署方式大部分采用类 Twemproxy 的方式进行部署。即通过 Twemproxy 对 redis key 进行分片计算,将 redis key 进行分片计算,分配到多个 redis 实例中的其中一个。tewmproxy 架构图如下:由于 Twemproxy 背后的多个 redis 实例在内存配置和 cpu 配置上都是一致的,所以一旦出现访问量倾斜或者数据量...转载 2019-06-17 19:56:02 · 2294 阅读 · 2 评论 -
如何提取Redis中的大KEY
工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大。那么大Key会带来哪些问题呢?如果是集群模式下,无法做到负载均衡,导致请求倾斜到某个实例上,而这个实例的QPS会比较大,内存占用也较多;对于Redis单线程模型又容易出现CPU瓶颈,当内存出现瓶颈时,只能进行纵向库容,使用更牛逼的服务器。 涉及到大key的操作,尤其是...转载 2019-06-17 20:34:58 · 2618 阅读 · 0 评论 -
如何做到阿里云 Redis 开发规范中的拒绝 bigkey
代码中的问题,光靠 Code Review 是不够的。Code Review 主要是解决规范问题,当然也能排查出一些 bug。Code Review 适合技术驱动型团队、公共服务型团队、测试缺失型团队、新人密集型团队、任何有主观意愿的团队。Code Review 活动主要围绕下面 4 项工作开展。说到代码规范,我们就不得不提阿里云的 Redis 开发规范。这个规范写的很好,想把我说的都...转载 2019-06-17 20:31:21 · 2578 阅读 · 1 评论 -
Redis大Key分拆方案
业务场景中经常会有各种大key的情况, 比如:1. 单个简单的key存储的value很大2. hash、set、zset、list中存储过多的元素(以万为单位)(文章中所提及的hash,set等数据结构均指redis中的数据结构)由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务上能拆则拆,下面举几个典型的分拆方案。1...转载 2019-02-21 09:35:31 · 6614 阅读 · 0 评论 -
热点key解决方案
热点问题概述产生原因热点问题产生的原因大致有以下两种:用户消费的数据远大于生产的数据 (热卖商品、热点新闻、热点评论、明星直播)在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,会形成一个较大的需求量,这种情况下就会造成热点问题。同理,被大量刊发、浏览的热点新闻、热点评论、明星直播等,这些典型的读多写少的场景也会产...原创 2019-02-21 16:03:21 · 1751 阅读 · 0 评论 -
redis事务
Redis 通过MULTI、DISCARD、EXEC和WATCH四个命令来实现事务功能, 本章首先讨论使用MULTI、DISCARD和EXEC三个命令实现的一般事务, 然后再来讨论带有WATCH的事务的实现。因为事务的安全性也非常重要, 所以本章最后通过常见的 ACID 性质对 Redis 事务的安全性进行了说明。事务事务提供了一种“将多个命令打包, 然...转载 2019-06-13 16:52:36 · 131 阅读 · 0 评论 -
分布式锁实现(一)
使用Redis的 SETNX 命令实现分布式锁。SETNX命令简介命令格式SETNX key value将 key 的值设为 value,当且仅当 key 不存在。 若给定的 key 已经存在,则 SETNX 不做任何动作。 SETNX 是SET if Not eXists的简写。返回值返回整数,具体为 - 1,当 key 的值被设置 - 0,当 key 的值没...原创 2018-03-07 16:06:35 · 374 阅读 · 0 评论 -
Redis-Dump安装及使用(redis数据导出)
前言在Redis的应用中有的时候我们需要将Redis中的数据导出,然后在另一台Redis上将数据导入,这个过程需要用到一个工具叫做redis-dump,今天主要向大家介绍改工具的安装及使用。安装RVMredis-dump这款工具需要用到Ruby,而centos环境中的yum工具可以安装的Ruby版本最高是2.0的版本,而当前Redis最新的4.0版本中需要用到的Ruby >= 2...原创 2018-10-31 14:31:30 · 8052 阅读 · 7 评论 -
缓存穿透与缓存雪崩
缓存穿透什么是缓存穿透?一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 如何避免?1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。2:对一定...转载 2018-10-16 16:22:38 · 147 阅读 · 0 评论 -
阿里云Redis开发规范
摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:1(2)【建议】:简洁性保证语义的前提下,控制key的长度,当key较多...转载 2018-03-16 18:34:23 · 231 阅读 · 0 评论 -
基于Redis的分布式锁真的安全吗?(上)
网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词“Redis 分布式锁”随便到哪个搜索引擎上去搜索一下就知道了。这些文章的思路大体相近,给出的实现算法也看似合乎逻辑,但当我们着手去实现它们的时候,却发现如果你越是仔细推敲,疑虑也就越来越多。实际上,大概在一年以前,关于Redis分布式锁的安全性问题,在分布式系统专家Martin Kleppmann和Redis的作者antire...转载 2018-03-07 17:34:14 · 237 阅读 · 0 评论 -
分布式锁实现(基于redis)
锁是很多系统的基础服务,但是实现分布式环境的锁并不是简单的事情。还好现在各类组件齐全,今天我们介绍基于Redis的锁的Java实现-redssion。(基于Redis的setnx原生实现的分布式锁:http://blog.csdn.net/wwd0501/article/details/79472511)1.安装redis安装redssion的锁服务队redis的版本有要求,要求必须高于2.8版本...原创 2016-02-22 16:16:00 · 1941 阅读 · 0 评论 -
Redis键值结构设计
和MySQL数据库关系表的设计不同 <这篇文章是网上已有的加以总结>用户登录系统记录用户登录信息表MySQL1mysql> select * from login;2+---------+----------------+-------------+---------------------+3| user_id | name | login_times |...转载 2018-03-05 10:29:18 · 2289 阅读 · 0 评论 -
redis有序集合(sorted sets)介绍(积分排行榜应用)
一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。原创 2018-01-11 17:57:33 · 1308 阅读 · 0 评论 -
Redis为什么使用单进程单线程方式也这么快
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。Redis快的主要原因是:完全基于内存数据结构简单,对数据操作也简单使用多路 I/O 复用模型第一、二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开。多路转载 2018-01-03 11:37:12 · 334 阅读 · 0 评论 -
redis遇到的问题
redis遇到问题:1、主从不同步(如:主库已过期,从库数据还存在,解决方式:判断ttl,若ttl>0,直接取redis;若是ttl2、当前已用内存超过maxmemory限定时,触发主动清理策略3、Redis过期键删除策略(遇到过冷数据没有删除的情况,执行get命令后删除了) (1)被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key原创 2017-03-14 10:36:40 · 871 阅读 · 0 评论 -
《Redis官方文档》Redis集群教程
这篇教程是Redis集群的简要介绍,而非讲解分布式系统的复杂概念。它主要从一个使用者的角度介绍如何搭建、测试和使用Redis集群,至于Redis集群的详细设计将在“Redis集群规范”中进行描述。本教程以redis使用者的角度,用简单易懂的方式介绍Redis集群的可用性和一致性。注意: 本教程要求redis3.0或以上的版本。如果你打算部署redis集群,你可以读一些关于集转载 2017-07-27 14:49:34 · 538 阅读 · 0 评论 -
redis批量删除key
redis批量删除keyredis本身不支持批量删除key.可以借助shell和lua脚本来实现比如删除前缀为 “phone” 的所有key1. shell脚本redis-cli KEYS "phone*" | xargs redis-cli DEL2. lua 脚本 windows客户端下可以使用redis-cli eval "原创 2015-09-23 10:53:40 · 3019 阅读 · 0 评论 -
关于Redis数据过期策略
1、Redis中key的的过期时间通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除转载 2016-07-13 17:38:35 · 9186 阅读 · 0 评论 -
Redis优化
根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。原创 2014-11-04 19:07:55 · 680 阅读 · 0 评论 -
redis主从不同步问题处理
近期遇到的问题如下:1 在主上setex的key即使过期后在从上也始终get的到。重现:主: setex abc 20 test从:get abc >> testttl abc >> 18...ttl abc >> -1get abc >> test (这里竟然还有~!)主:get abc >> nil从:g原创 2016-05-03 21:18:59 · 8964 阅读 · 0 评论 -
redis常用操作以及主从配置
启动redis # src/redis-server 启动的是默认配置(与redis.conf配置文件无关)# src/redis-server path/redis.conf 启动redis.conf中的配置(修改后的配置文件)关闭redis # src/redis-cli -h 127.0.0.1 -p 6379 shutdown 关闭redis服务器,关原创 2015-07-22 17:19:33 · 754 阅读 · 0 评论 -
《Redis官方文档》Redis集群教程
这篇教程是Redis集群的简要介绍,而非讲解分布式系统的复杂概念。它主要从一个使用者的角度介绍如何搭建、测试和使用Redis集群,至于Redis集群的详细设计将在“Redis集群规范”中进行描述。本教程以redis使用者的角度,用简单易懂的方式介绍Redis集群的可用性和一致性。注意: 本教程要求redis3.0或以上的版本。如果你打算部署redis集群,你可以读一些关于集转载 2016-02-16 17:56:45 · 662 阅读 · 0 评论 -
Redis学习手册
Redis学习手册(Sorted-Sets数据类型)Redis学习手册(String数据类型)Redis学习手册(Hashes数据类型)Redis学习手册(List数据类型)一、Redis的Replication。Redis学习手册(Set数据类型)Redis学习手册(Key操作命令)二、管线(pipelining)Redis学习手册(服务器管理)Redis学习手册(主从复制)Redis学习手册(虚拟内存)Redis学习手册(内存优化)Redis学习手册(持久化)Redis学习手册(开篇)原创 2014-11-02 15:28:55 · 503 阅读 · 0 评论 -
Redis安装和运行
本文主要描述Redis的安装、运行、使用。原创 2015-03-10 14:48:08 · 458 阅读 · 0 评论 -
Redis的客户端实现-Jedis
#redis服务器IPredis.ip=192.168.1.74#redis服务Portredis.port=6379#最大分配的对象数redis.pool.maxActive=1024#最大能够保持idel状态的对象数redis.pool.maxIdle=200#当池内没有返回对象时,最大等待时间redis.pool.maxWait=1000#当调用borrow Object原创 2014-11-04 17:36:58 · 826 阅读 · 0 评论 -
Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式等)介绍
Redis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务、管道及有jedis自身实现的分布式。最简单和基础的调用方式很简单吧,每次set之后都可以返回结果,标记是否成功。redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。我们调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。原创 2014-11-03 10:32:50 · 593 阅读 · 0 评论 -
解密Redis持久化
什么是持久化,简单来讲就是将数据放到断电后数据不会丢失的设备中。也就是我们通常理解的硬盘上。原创 2014-11-02 14:54:24 · 450 阅读 · 0 评论