Redis-数据结构
文章平均质量分 67
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
使用Redis实现实时排行榜
游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:1. 能够记录每个玩家的分数;2. 能够对玩家的分数进行更新;3. 能够查询每个玩家的分数和名次;4. 能够按名次查询排名前N名的玩家;5. 能够查询排在指定玩家前后M名的玩家。更进一步,上面的操作都需要在短时间内实时完成,这样才能最大程度发挥排行榜的效用。...转载 2021-01-28 11:30:04 · 804 阅读 · 1 评论 -
Redis-ZSet排序,分数相同的时候按照时间排序
1、-----------------------------------------------我们知道redis的zset是一个很好的排序工具,他会以member - score 的形式来排序,但是,当分数相同的时候,是按照member的字典序来排的,这样就有点不友好了,比如,我们要求当score相同时,先达到的排在前面,也就是最后更新时间小的排在前面。针对这样的需求,我们必须将更新时间整合到score里面去。我们知道score可以是整形和双精度浮点型。要按照updatetime从小到大排序转载 2021-01-28 10:50:38 · 16429 阅读 · 0 评论 -
Redis实现排行榜及相同分数排序规则定义
ZSet有序集合redis的有序集合与集合一样也是String类型元素的集合,不允许有重复的元素。每一个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合中的成员是唯一的,但是分数可以重复。集合是通过哈希表实现的,集合中的最大元素是2的32次方减1。Zset是有序且不重复的。注意:默认排序从小到大。ZSet命令1、赋值127.0.0.1:6379> zadd rank 90 c++ 80 java 70 php 6转载 2021-01-28 08:42:30 · 3848 阅读 · 0 评论 -
Redis Zset类型跳跃表算法实现
首先定义一个双向链表的类双向链表的流程图跳跃表的结构图跳跃表查找的过程跳跃表结构具体代码import wl.redis.Message;import java.util.*;class Node{ public Integer value; //插入的score排序数据 public String text; public Node up,down,left,right; //分别对应的四个方...转载 2021-01-04 09:46:18 · 515 阅读 · 1 评论 -
Redis SortedSet 中 score 的精度问题
一、问题发现通过 jedis 往 sortedset 中添加了个成员,并且设定了一个Double 类型的分数时,精度出现了问题测试代码如下:@Testpublic void zadd(){ jedis.zadd("test:cli", 13.36, "mb1");}如果用 jedis 的 api 来获取 score 的话一切正常@Testpublic void zscore(){ System.out.println(jedis.zscore("test:cli.转载 2020-05-18 12:16:42 · 2123 阅读 · 0 评论 -
揭开面纱,追着 redis 进行七连问
Hello Redis 有几个问题想请教你Hello,Redis! 我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否在让我多问问你的几个问题,让我更加深入的去了解你。1. redis的通讯协议是什么redis的通讯协议是文本协议,是的,Redis服务器与客户端通过RESP(REdis Serialization Pro...转载 2020-04-28 19:14:21 · 1310 阅读 · 2 评论 -
redis String类型底层数据结构 sds
一. 简单动态字符串1.1 什么是简单动态字符串?redis在实现字符串中并没有采用传统C语言中的字符串表示(传统的C语言字符串是一个以空字符结尾的字符数组),而是自己定义了一种叫做简单动态字符串(simple dynamic string, 简称SDS)的抽象类型,并用SDS用作redis默认的字符串表示。在Redis里面,C字符串只会作为字符串字面量(string literal)...转载 2020-04-28 19:07:47 · 2509 阅读 · 0 评论 -
Redis常用命令-Zset
https://blog.csdn.net/xiaouncle/article/details/62236593Redis是一个开源的速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。、请注意:存储在Redis中的数据并不会由...转载 2018-07-17 11:25:55 · 1264 阅读 · 0 评论 -
redis之有序集合类型(Zset)——排行榜的实现
https://blog.csdn.net/loophome/article/details/50373202Redis有序集合和Redis集合类似,是不包含 相同字符串的合集。它们的差别是,每个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。 因为元素是在插入时...转载 2018-07-17 11:32:04 · 3199 阅读 · 0 评论 -
Redis Ziplist 概述
https://www.jianshu.com/p/37c49b4e3bd0压缩列表压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项, 并且每个列表项要么就是小整数值, 要么就是长度比较短的字符串, 那么 Redis 就会使用压缩列表来做列表键的底层实现。比如说, 执行以下命令将创建一个压缩列表实现的列表键:redis> RPUSH...转载 2019-01-25 15:04:40 · 1537 阅读 · 1 评论 -
使用setbit、bitcount实现用户上线次数统计
1.语法SETBIT key offset value对 key 所储存的字符串值,设置或清除指定偏移量offset上的位(bit)。位的设置或清除取决于 value 参数,value参数取值 0 或者 1。字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。offset 参数必须大于或等于 0 ,小于 2^32 (...转载 2020-02-18 08:22:15 · 875 阅读 · 0 评论 -
Redis:Bitmaps使用场景-用户签到、统计活跃用户、用户在线状态
setbit命令:语法:setbit key offset value对key所存储的字符串值,设置或清除指定偏移量上的位(bit).位的设置或者清除取决于value参数,可以是0也可以是1.当key不存在的时候,自动生成一个新的字符串.字符串会进行伸展以确保它可以将value保存在指定的偏移量上。当字符串上的值进行伸展的时候,空白位置以0填充offset 参数必须大于或者等于0 小...转载 2020-02-15 22:07:47 · 1097 阅读 · 1 评论 -
Redis 命令 setbit、bitcount、getbit、bitop
注:setbit 是按照 bit 的位置来设置1的,从左开始,第一位offset为0,第二位为1,而bitcount 的start 和 end 是 基于byte的,即 bitcount xx 0 2 的话,计算的是bit offset从0到15的2个byte中bit为1的数量1.SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的...转载 2020-02-15 22:04:41 · 1528 阅读 · 0 评论 -
跳表:为什么Redis一定要用跳表来实现有序集合?
跳表这种数据结构对你来说,可能会比较陌生,因为一般的数据结构和算法书籍里都不怎么会讲。但是它确实是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree)。Redis 中的有序集合(Sorted Set)就是用跳表来实现的。如果你有一定基础,应该知道红黑树也可以实现快速的插入、删除和查找操作。那 Redis ...转载 2019-04-19 11:40:15 · 1104 阅读 · 0 评论 -
Redis为什么用跳表而不用平衡树?
https://blog.csdn.net/u010412301/article/details/64923131Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学...转载 2019-04-23 13:48:20 · 2175 阅读 · 0 评论 -
深入浅出Redis-redis底层数据结构(下)
https://www.cnblogs.com/jaycekon/p/6277653.html概述: 学习使用Redis,其实并不需要去研究其底层数据的实现。我们只需要了解他有哪些常用的数据类型,然后熟练使用,就可以很好的掌握Redis 这个工具了。但是这样的学习方法只适合Redis 的入门,“工欲善其事必先利其器”,我们想要用好Redis,则必须深入了解Redis 的底层到底...转载 2019-04-09 15:06:31 · 659 阅读 · 0 评论 -
深入浅出Redis-redis底层数据结构(上)
https://www.cnblogs.com/jaycekon/p/6227442.html1、概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-value数据库。 在《Redis设计与实现》这样描述: Re...转载 2019-04-09 15:05:31 · 668 阅读 · 0 评论