redis
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
4次优化,我把 Redis 性能 “压榨” 到极致!
本文转载自公众号https://mp.weixin.qq.com/s/y4q4Hb9A6xay3pAC_LBm5g我们有个这样的需求:每天每一个抢购商品只能买一次,并且全场抢购商品总购买次数不允许超过5次。那么,整个商品限购的流程大概如下图所示:那么,在每次购买成功商品成功后,发送的MQ大概是这样的(假设当前这笔订单有两件抢购商品):这条消息表示86000000000...转载 2020-03-19 12:04:17 · 3799 阅读 · 2 评论 -
redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?
本文首发于京东零售平台公众号,https://mp.weixin.qq.com/s/uzuz7rqctQ-bjdRcf1tO9gredis作为目前最流行的nosql缓存数据库,凭借其优异的性能、丰富的数据结构已成为大部分场景下首选的缓存工具。由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观。那么在一些场景下,通过选用合适的数据结构来存储,可以大幅减少内存的占用,...原创 2019-12-10 09:29:31 · 2088 阅读 · 2 评论 -
分布式环境下对部分热数据(如redis热key,热请求)进行探测,并对探测结果及时同步到各个client实例的JVM内存的方案简述
可先阅读之前的这篇,有赞的热key探测及缓存方案。常见场景突发性的无法预先感知的热点数据请求,或者有阵发性明显热点数据的。譬如突然大量请求都命中了redis的某个分片,造成该redis卡顿,影响其他请求。热key特性如 goodsId=100,突发1万请求该key。譬如突然大量同一个用户的请求某一个或多个接口,呈现出攻击性访问的。热key特性如userId-99= /cart,/c...原创 2019-11-15 10:06:53 · 1194 阅读 · 1 评论 -
有赞的redis热key探测及缓存到jvm内存框架方案
下面这篇文章来自于有赞的知识共享,总体设计还是不错的,但我对其中的一点比较存疑。就是将计算热点key的工作放在客户端这里。因为一个java实例,可能面临巨多的get请求,譬如请求的key数量较多,那么由客户端来记录这些key,并计算key的热度,是一个比较费力且吃内存的事。即便他限制了最大内存量,那可能会漏掉很多key。还有一种,譬如某个key非常热,但是请求分散到了N个实例里,显得单个实...转载 2019-10-29 10:50:10 · 3095 阅读 · 5 评论 -
使用redis分布式锁高并发下QPS测试,单机一秒下1千个订单
前面一篇讲过并发下单时进行优化的一些策略,后来我写了代码进行了实测。关于redisson做分布式锁的代码在这篇文章。这里我来测试一下分布式锁的性能。简单的controllerpackage com.tianyalei.redislock.controller;import org.springframework.web.bind.annotation.RequestMapping...原创 2019-10-15 19:40:23 · 3737 阅读 · 2 评论 -
redisson分布式锁源码和原理浅析
之前写过一篇使用redisson完成简单的分布式锁的文章,https://blog.csdn.net/tianyaleixiaowu/article/details/90036180在redisson之前,很多人可能已经自己实现过基于redis的分布式锁,本身原理也比较简单,redis自身就是一个单线程处理器,具备互斥的特性,通过setNx,exist等命令就可以完成简单的分布式锁,处理好超时...原创 2019-07-16 16:07:07 · 17254 阅读 · 3 评论 -
Redis 内存使用优化与存储
转载自:https://www.cnblogs.com/_popc/p/5968683.htmlRedis 常用数据类型Redis 最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下 Redis 内部内存管理中是如何描述这些不同数据类型的:...转载 2019-06-20 17:08:44 · 449 阅读 · 0 评论 -
Redis百亿级Key存储方案
转自:https://www.cnblogs.com/colorfulkoala/p/5783556.html1 需求背景该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperid的人口标签、移动端id(主要是idfa和imei)的人口标签,以及一些黑名单id、...转载 2019-06-20 10:57:58 · 1240 阅读 · 0 评论 -
Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖
在电商中经常会有防超卖的需求,本质上是对一条数据的多线程并发情况下的数据安全性进行控制。譬如一个商品goods,库存是100,在多线程都去读取修改的情况下,会产生数据错乱。不加锁的情况我们来看一个简单的例子,有个goods表,里面有个int型字段amount。我们用多线程来频繁修改amount的值,看看结果。 @Transactional(rollbackFor = Except...原创 2019-05-10 15:11:17 · 17292 阅读 · 35 评论 -
SpringBoot2集成redis,使用lettuce客户端
Springboot集成redis大家都会用,主要就是使用RedisTemplate类来进行各种操作。可能很多人并没有注意,在Springboot2以后,底层访问redis已经不再是jedis了,而是lettuce。至于jedis和lettuce有什么区别呢,对我们的使用有什么影响呢?jedis采用的是直连redis server,在多个线程之间共用一个jedis实例时,是线程不安全的。如...原创 2019-05-05 16:12:19 · 25024 阅读 · 9 评论 -
redis的一些知识-redis事务multi
redis是有事务的,但是不同于mysql的事务。redis的事务是由multi和exec包围起来的部分,当发出multi命令时,redis会进入事务,redis会进入阻塞状态,不再响应任何别的客户端的请求,直到发出multi命令的客户端再发出exec命令为止。那么被multi和exec包围的命令会进入独享redis的过程,直到执行完毕。事务同命令一样都是Redis的最小执行单位,一个事务中的命令原创 2018-01-16 10:33:00 · 3888 阅读 · 3 评论 -
redis的一些知识-使用pipeline来大幅提升redis的处理速度
redis通过tcp来对外提供服务,client通过socket连接发起请求,每个请求在命令发出后会阻塞等待redis服务器进行处理,处理完毕后将结果返回给client。其实和一个http的服务器类似,一问一答,请求一次给一次响应。而这个过程在排除掉redis服务本身做复杂操作时的耗时的话,可以看到最耗时的就是这个网络传输过程。每一个命令都对应了发送、接收两个网络传输,假如一个流程需要0.1秒,那原创 2018-01-15 16:24:44 · 7115 阅读 · 0 评论 -
redis的一些知识-配置文件解释
redis比较常用,但大部分人都是简单使用一下redis存一些key value,不太关心redis的持久化问题、事务、最大客户端连接数等问题。这一篇就是讲一些平时不太注意的事情。redis配置文件解释在redis的安装目录中,可以找到redis.conf,这个文件就是redis的主要配置文件,里面配置了很多属性。我挑几个可能用的着的来看一下,其他的可以看看这篇https://www.cnblog原创 2018-01-15 14:40:20 · 850 阅读 · 0 评论 -
Redis编程实践【pipeline和事务】
Redis,redis管道,redis pipeline,redis事务转载 2017-09-26 09:50:05 · 1229 阅读 · 0 评论