1.String
含义:字符串
使用场景:缓存、验证码、计数器、分布式锁、分布式id生成器
常用命令: get、set 、 mget(批量获取)、incr(计数器)、setnx(锁)
2.List
含义:双向列表
特点:有序,方便截取
使用场景:最新列表,关注列表,消息队列
常用命令:lpush(添加到头部)、lrange(指定范围查)、 brpop (移除并弹出最后一个) 、lpop(移除并获取第一个元素)
3.Set
含义:set集
特点:可根据自定义分值排序
使用场景:无序集合,已读,抽奖,共同好友
常用命令:sadd(添加)、scard(成员数) sinter(交集)、sunion(并集)、sdiff(差集)
4.Hash
含义:Hash类型
特点:大key,小key
使用场景:对象属性,点赞,点踩
常用命令:hget、hset、hincrby、hmget、hscan(迭代哈希表中的键值对)
5.Sorted set (跳表实现)
含义:有序集,多了一个权重参数score ,可根据分值排序。
特点:可根据自定义分值排序
使用场景:排行榜,优先队列,分页有序缓存
常用命令:zadd、zcard(有序集合的成员数)、zincrby、zrange
6.Bitmap
Redis 中的 bitmap 位图是一串连续的二进制数字,底层实际是基于 string 进行封装存储的
,按 bit 位进行指令操作的。误判率万分之一 ,差不多可以放下2亿左右的数据
性能高,空间占用率极小,省去了大量无效的数据库连接。
可用于实现用户签到、用户日活、在线状态、布隆过滤器等。
常用命令:setbit、 getbit、bitcount、bitfield、 bitop、bitpos 等。
可用来实现 布隆过滤器(BloomFilter);
统计日活示例场景
key:自定义前缀+yyyyMMdd
offset:用户ID
7.HyperLogLog:
Redis 的 hyperLogLog 是用来做基数统计的数据类型,当输入巨大数量的元素做统计时,只需要很小的内存即可完成
占用内存非常少,非常适合统计海量数据
在大中型系统中,统计每日、每月的 UV、 即独立访客数,或者统计海量用户搜索的独立词条数
常用命令:pfadd(增加新的元素)、pfcount(返回给定 HyperLogLog 的基数估算值)、pfmerge(多个合并查询)
场景例如:用户登录到系统统计
用 bitmap 存储 1 个亿 统计数据大概需要 12 M 内存,
而在 HyperLoglog 中,只需要不到 1 K 内存就能够做到!
在 Redis 中实现的 HyperLoglog 也只需要 12 K 内存
8.Geo:
含义:存储地理位置信息
使用场景:附近好友
Redis GEO 操作方法有:
- geoadd:添加地理位置的坐标。
- geopos:获取地理位置的坐标。
- geodist:计算两个位置之间的距离。
- georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
- georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
- geohash:返回一个或多个位置对象的 geohash 值。
可以用来保存地理位置,并作位置距离计算或者根据半径计算位置等。
比如来实现附近的人?或者计算最优地图路径 。
9.pub/sub
功能是订阅发布功能,可以用作简单的消息队列。
10.Pipeline
可以批量执行一组指令,一次性返回全部结果,可以减少频繁的请求应答。
11.Lua
Redis 支持提交 Lua 脚本来执行一系列的功能。