Redis常用使用场景

200 阅读4分钟

1.热点数据的缓存(最为常用的功能)

Redis提供5种数据类型进行存储:String(字符串)、List(列表)、Hash(哈希)、Set(无序,不重复集合)、ZSet(sorted set:有序,不重复集合),建议设置过期时间来进行缓存的更新,还需要考虑缓存数据库的数据一致性问题。

2.业务的限时

使用expire命令设置一个key的过期时间,时间到就会删除,主要适用于手机验证码,限时活动等。

3.排行榜(ZSet)

序号命令及描述
1ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2ZCARD key 获取有序集合的成员数
3ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment(手动置顶功能)
5ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中
6ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
8ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
9ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
10ZRANK key member 返回有序集合中指定成员的索引
11ZREM key member [member ...] 移除有序集合中的一个或多个成员
12ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
13ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
14ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
15ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
16ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18ZSCORE key member 返回有序集中,成员的分数值
19ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

4.计数器

使用incrby命令可以实现原子性的递增,可以使用在秒杀活动,分布式序列号,接口请求限制,邮箱发送上线等。

5.分布式锁

建议使用redisson ,redisson内部是redlock算法。

6.大数据处理签到等(位操作)

redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示我们上面例子里面的用户id(必须是数字),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统就能够实现。用到的命令是:setbit、getbit、bitcount。

例如:统计今日登录的用户数,我们建立了一个bitmap,每一位标识一个用户ID,当某个用户访问我们的网页或执行了某个操作时,将bitmap中对应位置的位置为1,时间复杂度是O(1)。

redis> SETBIT daliy_user 100 1
(integer) 0
​
redis> GETBIT daliy_user 100
(integer) 1
​
redis> BITCOUNT daliy_user   # 只返回值为1的数量
(integer) 1

7.地理位置

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。