nosql
hongmingover
。。。。。。。
展开
-
一次Redis TTL 为0的问题排查
一次RedisTTL为0的问题排查事情是这样的,今天中午业务突然RTX上找我,说一个新建的Twemproxy集群数据查询的时候出了问题,Redis的TTL返回为0,让我帮忙看一看:当时听完就觉得问题很诡异,按照之前的经验来说,Redis的TTL怎么也不可能为0啊,见:http://redis.io/commands/ttlRedis的key,通过TTL命令返回key...转载 2019-10-25 11:16:44 · 2889 阅读 · 0 评论 -
用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景?
用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景?首先,我们一起来看看这个问题的背景?前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题:假如下单时,用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景? 他说他当时没答上来,因为没...转载 2019-04-17 17:14:36 · 803 阅读 · 1 评论 -
高并发请求的缓存设计策略
高并发请求的缓存设计策略前几天,我司出了个篓子。当时正值某喜闻乐见的关键比赛结束,一堆人打开我司app准备看点东西,结果从来没有感受到过这么多关注量的该功能瞬间幸福到眩晕,触发了熔断,结果就是大量兴致冲冲打开app准备看该比赛结果的人被迫刷了十分钟三天前的野外跑酷,负责内容的人火大到直接骂娘。虽然这个业务不是我负责,但是也跟相关的人聊了下情况,感慨了一下,于是有了这一篇文章。1.为何需...转载 2019-04-16 15:30:44 · 152 阅读 · 0 评论 -
redis事务以及watch的理解
redis事务以及watch的理解2018.05.14 12:04字数 28阅读 156评论 0喜欢 0事务的特性1.原子性,数据库事务中的多个操作,要么同时执行成功,要么一个也不执行,执行的时候将事务中的命令入队列,当客户端发送执行命令时,将命令依次执行,如果遇到回滚操作,则抛弃该事务中队列的命令.2.一致性,数据库在执行事务之前一致的,那么执行之后也一致,这其中的一...转载 2019-04-16 11:40:55 · 411 阅读 · 0 评论 -
redis使用watch完成秒杀抢购功能(转)
redis使用watch完成秒杀抢购功能:使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。它的优点如下:1. 首先选用内存数据库来抢购速度极快。2. 速度快并发自然没不是问题。3. 使用悲观锁,会迅速增加系统资源。4. 比队列强的多,队列会使你的内存数据库资源瞬间爆棚。5. 使用乐观锁,达到...转载 2019-04-16 11:38:01 · 212 阅读 · 0 评论 -
redis 基本命令--位图
redis 基本命令--位图1.业务背景现有一个业务需求,需要从一批很大的用户活跃数据(2亿+)中判断用户是否是活跃用户。2. 存在的挑战海量数据如何尽可能用小的空间存储 如何能快速获取指定的数据 如何能快速的写入到目标存储3.解决思路这里使用redis的位操作来处理。redis中所有数据都是二进制形式存储的。redis支持一个setbit和getbit操作,它...转载 2019-04-15 23:45:25 · 129 阅读 · 0 评论 -
布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法
布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法引言在介绍布隆过滤器之前我们首先引入几个场景。场景一在一个高并发的计数系统中,如果一个key没有计数,此时我们应该返回0,但是访问的key不存在,相当于每次访问缓存都不起作用了。那么如何避免频繁访问数量为0的key而导致的缓存被击穿?有人说, 将这个key的值置为0存入缓存不就行了吗?确实,这...转载 2019-04-15 20:51:50 · 1573 阅读 · 0 评论 -
严格排行榜Redis实现
严格排行榜Redis实现1 常见排行榜排行榜主要分为两种,一种是并列排行榜(存在相同排名的情况),一种是严格排行榜(分先后顺序,不存在并列名次)。一般根据不同的业务场景,选用不同的排行榜。例如,对于存在实物奖励且前一名与后一名的奖品差距很大时,往往采用严格排行榜,而对于只是激励用户的场景,则选用并列排行榜。2 Redis严格排行榜实现(1)数据结构:利用Redis的有序数列集合...转载 2019-04-08 20:35:35 · 553 阅读 · 1 评论 -
redis的过期策略以及内存淘汰机制
redis的过期策略以及内存淘汰机制分析:这个问题其实相当重要,到底redis有没用到家,这个问题就可以看出来。比如你redis只能存5G数据,可是你写了10G,那会删5G的数据。怎么删的,这个问题思考过么?还有,你的数据已经设置了过期时间,但是时间到了,内存占用率还是比较高,有思考过原因么?回答:redis采用的是定期删除+惰性删除策略。为什么不用定时删除策略?...转载 2019-04-08 10:24:18 · 173 阅读 · 0 评论 -
Redis事务使用方法 watch
Redis事务Redis事务是一组命令的集合,也是Redis的最小执行单位之一。一个事务的所有命令,要么都执行,要么都不执行。Redis能保证事务执行期间不会有其他命令插入。相关命令命令 格式 说明 DISCARD DISCARD 取消事务 EXEC EXEC 执行事务中的命令 MULTI MULTI 标记一个事务...转载 2019-04-17 17:44:04 · 2342 阅读 · 0 评论 -
Redis CAS乐观锁实现
Redis CAS乐观锁实现版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/luqiang81191293/article/details/77967275随着业务量的增大,系统必然遇到了并发资源抢占的问题,也就引发了分布式锁的讨论。在实现了ZK锁后,虽然解决了部分问题,但总感觉还有更好的方法(Redis锁性能肯定是比ZK高的,在这里就...转载 2019-04-17 17:48:48 · 379 阅读 · 0 评论 -
Redis之bitMap(位图)
Redis之bitMap(位图) 1、位图结构redis可以直接对二进制位进行操作。2、setbit位图设值offset:位数value:值 只能是0或者13、getbit获取位图值4、bitcount统计范围内的1个数5、bitpos计算范围内targetbit的位置6、位图的使用...转载 2019-04-18 11:10:09 · 238 阅读 · 0 评论 -
Redis理解之缓存设计
Redis理解之缓存设计版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ym123456677/article/details/80063491 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析、缓存更新策略的选择和使用场景、...转载 2019-05-13 12:43:02 · 176 阅读 · 0 评论 -
Redis的key和value大小限制
Redis的key和value大小限制Redis的key和value大小限制 今天研究了下将java bean序列化到redis中存储起来,突然脑袋灵光一闪,对象大小会不会超过redis限制?不管怎么着,还是搞清楚一下比较好,所以就去问了下百度,果然没多少人关心这个问题,没找到比较合适的答案,所以决定还是去官网找吧。找到两句比较关键的话,截图如下。结论 ...原创 2019-05-13 11:15:43 · 546 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩区别和解决方案
缓存穿透、缓存击穿、缓存雪崩区别和解决方案一、缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。 二、缓存穿透 描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不...转载 2019-05-13 17:52:46 · 209 阅读 · 0 评论 -
Redis常用集群分片实现方案以及ShardedJedis分片源码简析
Redis常用集群分片实现方案以及ShardedJedis分片源码简析这两天项目上需要添加一个限流,基于redis+lua的实现方案,项目中使用ShardedJedis进行redis集群分片,但是ShardedJedis并不支持eval和evalsha函数,所以就对jedis包中SharedJedis部分做了一点修改,使其可以支持这两个函数。顺便看了一下ShardedJedis中分片部分...转载 2019-04-24 14:54:04 · 438 阅读 · 0 评论 -
redis分片机制
redis分片机制 所谓的分片其实就是大的数据分成几个小的部分,分别放置存储,对于数据而言无外乎就是读写,读写的基础就是数据的定位,redis利用集群的方式+槽位完成,分片的数据的定位和管理维护。 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。Redis 集群使用数据分片(sharding)而非一致性哈希(consis...转载 2019-04-24 14:40:04 · 203 阅读 · 0 评论 -
Redis中bitmap的妙用
Redis中bitmap的妙用redis php bitmap23k 次阅读 · 读完需要 12 分钟62在Redis中我们经常用到set,get等命令,细心的你有没有发现,还有几个相似的命令叫setbit,getbit,它们是用来干嘛的?BitMap是什么就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8...转载 2019-04-18 15:14:13 · 128 阅读 · 0 评论 -
redis锁处理并发问题
redis锁处理并发问题redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法,在此进行自己的总结和整理。set方式 setnx方式 setnx+getset方式set方式作为redis小白,一开始能想到的使用redis加锁的方式就是set。加锁:redis中set一个值,set(lock,1);并发处理:其他线程必须拿到这个值,才可以往下进行,否...转载 2019-03-27 11:10:06 · 1666 阅读 · 0 评论 -
使用redis的有序集合实现排行榜功能
使用redis的有序集合实现排行榜功能游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:能够记录每个玩家的分数; 能够对玩家的分数进行更新; 能够查询每个玩家的分数和名次; 能够按名次查询排名前N名的玩家; 能够查询...转载 2019-03-19 10:10:07 · 406 阅读 · 0 评论 -
Redis多个数据库
Redis多个数据库注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。每个数据...转载 2019-03-12 19:58:27 · 306 阅读 · 0 评论 -
Memcached 和 Redis 分布式锁方案
Memcached 和 Redis 分布式锁方案分布式缓存,能解决单台服务器内存不能无限扩张的瓶颈。在分布式缓存的应用中,会遇到多个客户端同时争用的问题。这个时候,需要用到分布式锁,得到锁的客户端才有操作权限。Memcached 和 Redis 是常用的分布式缓存构建方案,下面列举下基于Memcached 和 Redis 分布式锁的实现方法。Memcached 分布式锁Memcached 可以使用...转载 2018-04-15 23:00:38 · 166 阅读 · 0 评论 -
Memcached 和 Redis 分布式锁方案
Memcached 和 Redis 分布式锁方案分布式缓存,能解决单台服务器内存不能无限扩张的瓶颈。在分布式缓存的应用中,会遇到多个客户端同时争用的问题。这个时候,需要用到分布式锁,得到锁的客户端才有操作权限。Memcached 和 Redis 是常用的分布式缓存构建方案,下面列举下基于Memcached 和 Redis 分布式锁的实现方法。Memcached 分布式锁Memcached 可以使用...转载 2018-04-15 22:57:30 · 196 阅读 · 0 评论 -
单进程单线程的Redis如何能够高并发
单进程单线程的Redis如何能够高并发参考文档: (1)http://yaocoder.blog.51cto.com/2668309/888374 (2)http://www.cnblogs.com/syyong/p/6231326.html1、基本原理 采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗) (1)为什么不采用多进程或多线程处理?多线程处理可转载 2018-01-18 16:09:03 · 456 阅读 · 0 评论 -
Redis Hash操作
Redis Hash操作redis 127.0.0.1:6379> hset user user2 9000(integer) 1redis 127.0.0.1:6379> hset uset user3 8000(integer) 1redis 127.0.0.1:6379> hset user user3 8000(integer) 1redis 127.0转载 2017-08-02 19:42:46 · 252 阅读 · 0 评论 -
Redis解毒
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding转载 2016-09-18 12:14:31 · 527 阅读 · 0 评论 -
跳跃表原理
跳跃表原理 最近看了一种数据结构叫做skipList,redis和levelDB都是用了它。Skip List是在有序链表的基础上进行了扩展,解决了有序链表结构查找特定值困难的问题,查找特定值的时间复杂度为O(logn),他是一种可以代替平衡树的数据结构。 下面是skipList的一个介绍,转载来的,源地址:http://kenby.iteye.com转载 2017-03-22 18:18:36 · 273 阅读 · 0 评论 -
Redis为什么用跳表而不用平衡树?
Redis为什么用跳表而不用平衡树?Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。因转载 2017-03-22 18:09:28 · 16852 阅读 · 5 评论 -
Redis中有序集合与列表占用内存分析
Redis中有序集合与列表占用内存分析摘要: 字典、压缩列表与跳跃表的介绍。 为什么redis中的有序集合占用内存比列表大? 在说正题之前需要先了解几种定义:字典、压缩列表与跳跃表。 字典:非常常见的数据结构,key-value结构。 常见的实现有红黑树(stl中的map),哈希表(stl中的unordered_map)。红黑树的查转载 2017-03-22 18:06:55 · 2384 阅读 · 0 评论 -
memcache 之cas理解
memcache 之cas理解原创 2016年01月09日 22:50:00标签: memcached / 乐观锁1381翻了一遍百度,寻找cas的意思. 这玩意叫:memcached 原子性操作就是一个乐观锁废话少说(下面说),上例菜:用户A和用户B 分别不同地域的银行取款(输入卡号密码即可),已知卡里面有余额1000元。 用户A取款500元、用户B取款300元。...转载 2018-12-25 11:39:55 · 650 阅读 · 0 评论 -
关于memcache和Redis的区别和总结
关于memcache和Redis的区别和总结Redis和Memcached整体对比1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。2)内存...转载 2018-04-17 21:03:23 · 410 阅读 · 0 评论 -
分布式锁_Redis_Setnx_getSet
分布式锁_Redis_Setnx_getSet使用Redis-setnx-getset实现分布式锁实现原理:Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。redis的SETNX命令可以方便的实现分布式锁。SETNXSETNX key value将 key 的值设为 value,当且仅当 key 不存在。 若给定的 key 已经存在,...转载 2018-04-05 16:11:51 · 330 阅读 · 0 评论 -
redis内存回收策略
redis内存回收策略版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JYL15732624861/article/details/82414056删除到达过期时间的键对象 内存使用达到maxmemory上限时触发内存溢出控制策略 1、删除过期键对象 redis所有键都可以设置过期时间,因为内存中大量建维护消耗大量CPU,对...转载 2019-03-11 10:04:43 · 157 阅读 · 0 评论 -
redis中maxmemory和淘汰策略
redis中maxmemory和淘汰策略2017.07.29 12:43*字数 463阅读 3163评论 0喜欢 0在redis中,允许用户设置最大使用内存大小maxmemory(需要配合maxmemory-policy使用),设置为0表示不限制;当redis内存数据集快到达maxmemory时,redis会实行数据淘汰策略。Redis提供6种数据淘汰策略:volatile-...原创 2019-03-10 14:10:50 · 592 阅读 · 0 评论 -
跳跃表 SkipList【数据结构】原理及实现
跳跃表 SkipList【数据结构】原理及实现版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/52454462为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗?...转载 2019-03-10 13:36:53 · 147 阅读 · 0 评论 -
位运算之——按位与(&)操作——(快速取模算法)
位运算之——按位与(&)操作——(快速取模算法)学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作,其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描!其中涉及位运算 & 和 %操作之间的关系!故整理学习资料如下:原文引自:http://blog.sina.com.cn/s/blog_7b...转载 2019-03-09 22:08:50 · 855 阅读 · 0 评论 -
渐进式 rehash
渐进式 rehash上一节说过, 扩展或收缩哈希表需要将 ht[0] 里面的所有键值对 rehash 到 ht[1] 里面, 但是, 这个 rehash 动作并不是一次性、集中式地完成的, 而是分多次、渐进式地完成的。这样做的原因在于, 如果 ht[0] 里只保存着四个键值对, 那么服务器可以在瞬间就将这些键值对全部 rehash 到 ht[1] ; 但是, 如果哈希表里保存的键值对数量不...转载 2019-02-12 10:33:23 · 290 阅读 · 0 评论 -
巧用CAS解决数据一致性问题
缘起:在高并发的分布式环境下,对于数据的查询与修改容易引发一致性问题,本文将分享一种非常简单但有效的优化方法。 一、业务场景业务场景为,购买商品的过程要对余额进行查询与修改,大致的业务流程如下:(1)从数据库查询用户现有余额 SELECT money FROM t_yue WHERE uid=$uid,不妨设查询出来的$old_money=100元 (2)业务层实施业...转载 2016-11-16 18:30:21 · 757 阅读 · 0 评论 -
【Redis】- 双写一致性
好好学习,天天向上! 【Redis】- 双写一致性首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷...转载 2018-12-19 20:08:54 · 356 阅读 · 0 评论 -
redis 的incr/decr 的原子性是什么意思?
原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做。Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作实现简单计数器功能;简单解释就是你的服务即使是多机器多进程的,incr也能保证每次返回的结果不会出现相同的原创 2017-03-06 20:55:16 · 11519 阅读 · 0 评论