Redis数据类型
大约 6 分钟RedisRedis
数据类型
String
字符串
应用场景:验证码、计数器、订单重复提交、用户登录信息、商品详情
常用命令
- set/get: 设置和获取keyValue
- mget/mset: 批量设置或获取多个key的值
- incr: 值加1
- incrby: 增加指定数值
- setex:设置值,并指定过期时间。setex key seconds value
- setnx: 不存在就设置值
Set(无序集合)
- string的无序排列
- 应用场景:差集、交集、并集、大数据里面的用户画像标签集合、社交应用里面的共同好友
- 命令:
- sadd:添加一个或多个指定的member元素到集合的key中.指定的一个或者多个元素member如果已经在集合key中存在则忽略,SADD key member
- scard:返回集合元素的数量,SCARD key
- sdiff:返回的集合元素是第一个key的集合与后面所有key的集合的差集
- sinter:返回指定所有的集合的成员的交集,
- sismember:返回成员member是否是存储的集合key的成员.
- srem:溢出指定的元素
- sunion:取并集
- smembers,返回key集合所有的元素
Zset(有序集合)
- 使用HashMap+跳表skipList保证数据存储和有序
- 应用场景: 商品日销榜、积分榜等
- 命令:
- zadd:添加元素
- zcard:获取有序集合的成员数
- zcount:计算在有序集合中指定分数的集合
- zincrby: 增加有序集合指定成员分布
- zrange:通过索引区间返回有序集合指定区间的成员,分数按照从小到大排序
- zrevrange:ZREVRANGE key start stop [WITHSCORES],通过索引区间返回有序集合指定区间的成员,分数按照从大到小排序
- zrevrank:ZREVRANK key member,返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
- zrank:ZRANK key member,返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列
- zrem:ZREM key member [member ...,移除有序集合中的一个或多个成员
- zscore,ZSCORE key member,返回有序集中,成员的分数值
Bitmap(位图)
位图不是一种实际的数据类型,而是一组在String类型上定义的面向位的操作。由于字符串是二进制安全的blobs,并且它们的最大长度是512 MB,所以它们适合设置2^32个不同的位。
应用场景: 存储与对象id相关联的高效但高性能的布尔信息、实时分析
命令:
setbit :给位图指定位置设置值(只支持0和1),setbit key offset value
getbit : 获取值
bitcount :获取数据为1的个数
List(列表)
- 双向链表,插入删除时间复杂度O(1)快,查找为O(n)慢
- 应用场景: 简单队列、最新商品列表、评论列表、消息队列
- 命令
- lpush:将数据插入头部
- rpop: 移除并获取最后一个元素
- llen: 获取列表长度
- lindex: 通过索引获取指定元素
- lrange: 获取指定范围内的元素,0代表第一个,-1代表所有元素
- rpush:在尾部插入一个元素
- lpop:从头部移除一个元素并获取
- brpop:移除并获取最后一个元素,如果没有值会阻塞直到超时
- lrem:移除元素,可以指定个数
HyperLogLog
HyperLogLog是一个专门为了计算集合的基数而创建的概率算法,对于一个给定的集合,HyperLogLog可以计算出这个集合的近似基数:近似基数并非集合的实际基数,它可能会比实际的基数小一点或者大一点,但是估算基数和实际基数之间的误差会处于一个合理的范围之内,因此那些不需要知道实际基数或者因为条件限制而无法计算出实际基数的程序就可以把这个近似基数当作集合的基数来使用。
HyperLogLog的优点在于它计算近似基数所需的内存并不会因为集合的大小而改变,无论集合包含的元素有多少个,HyperLogLog进行计算所需的内存总是固定的,并且是非常少的。具体到实现上,Redis的每个HyperLogLog只需要使用12KB内存空间,就可以对接近:264个元素进行计数,而算法的标准误差仅为0.81%,因此它计算出的近似基数是相当可信的。
命令
- pfadd key value1 value2 ...:根据给定的元素是否已经进行过计数,PFADD命令可能返回0,也可能返回1,如果给定的所有元素都已经进行过计数,那么PFADD命令将返回0,表示HyperLog-Log计算出的近似基数没有发生变化,如果给定的所有元素都已经进行过计数,那么PFADD命令将返回0,表示HyperLog-Log计算出的近似基数没有发生变化。
- pfcount key:获取到alphabets这个HyperLogLog计算出的近似基数
- pfcount key1 key2:向PFCOUNT传入多个HyperLogLog时,PFCOUNT命令将对所有给定的Hyper-LogLog执行并集计算,然后返回并集HyperLogLog计算出的近似基数
应用场景
- 大数据去重: 在大数据场景下,需要去重的数据量非常大,如果使用传统的去重算法,需要对每个元素进行存储 和比对,时间和空间消耗非常高。HyperLogLog算法可以在占用极小的空间的情况下,高效地对规模数据进行去重,提高去重效率。
- 用户活跃度统计: 在Web应用和移动应用中,需要对用户的活跃度进行统计。如果每个用户的活跃度都进行存储, 需要消耗大量的存储空间。HyperLogLog算法可以在占用极小的空间的情况下,高效地统计活跃 用户数量,提高统计效率。
- 网站UV统计: 在Web应用中,需要统计网站每日独立访客数量(即UV),但是由于数据量非常大,不能简单地 直接计数,因为会导致内存不足。HyperLogLog算法可以在占用极小的空间的情况下,高效地对 大规模的访问日志进行去重和统计,提高统计效率。
- 社交网络推荐: 在社交网络中,需要对用户的兴趣爱好进行统计,以便向用户推荐相关内容。HyperLogLog算法 可以在占用极小的空间的情况下,高效地对用户行为进行去重和统计,提高推荐效率。
Hash
命令
- HSET设置一个或多个哈希字段的值。
- HGET返回给定字段的值。
- HMGET返回一个或多个给定字段的值。
- HINCRBY将给定字段的值加所提供的整数。
应用场景
- 存储个人信息
- 电商里面的存储购物车结构,key为用户id,第二层mapkey是商品id,值是商品数量
命令图
