Redis有哪些数据类型,以及各自应用场景

一、数据类型:

String、Hash、List、Set、zSet、HyperLogLog、Geo、Pub/Sub

 

二、应用场景:

1、String(字符串)

set、setnx、get、decr、incr、mget

缓存层(mysql 存储层,redis做缓存层)、计数器(比如视频播放数,博客浏览数等)、共享session、短信验证码每隔多少秒才可以再获取

2、Hash(hashMap)

hset、hget、hdel、hlen、hexists、hkeys、hvals、hgetall

存储用户信息

3、List(双向链表)

lpush、rpush、lpop、rpop、brpop、lrange、lindex、len、lrem

关注列表、粉丝列表

消息队列:

lpush + lpop = 栈

lpush + rpop = 队列

lpush + ltrim = 有限集合

lpush + brpop = 消息队列

还可以利用 list 的 lrange 实现简单的分页查询

4、Set

sadd、spop、sismember、srem、sunion、sdiff

集合元素不重复,支持集合内的增删改查、取交集、并集、差集、合集

(1)标签

用户兴趣标签tag,可以根据标签获取到拥有同一标签的人的其他喜好,比如看小说时的小说推荐,以及看视频时的视频推荐

(2)生成随机数(抽奖)

(3)社交需求

5、SortedSet

zadd、zcard、zscore、zrank、zrem、zincrby、zrange

集合元素不重复,而且可以排序,根据csore排序

(1)榜单

视频播放量榜单、获赞榜单等

注:redis key 的设计

使用冒号进行分段存储,层级分明,利于客户端进行数据分析

6、HyperLogLog

pfadd、pfcount

HyperLogLog占用的空间固定,12k左右,可以估算出大约2^64个元素的基数

统计一个页面的用户访问量

虽然也可以使用set做,但数据来那个上千万,将会是一个非常大的开销

7、geo

Geoadd:增加某个地理位置的坐标

Geopos:获取某个地理位置的坐标

Geodist:获取两个地理位置的距离

GEORADIUS:根据给定地理位置坐标获取指定范围内的地理位置集合

GEOHASH:获取某个地理位置的 geohash 值

比如美团外卖显示商家距离你多远距离,可以数据库中存储商家经纬度坐标,通过redis的geo计算得出距离

8、Pub/Sub

发布订阅,实际应用场景较少,但redis的哨兵机制,实际上其中就有用到 Pub/Sub。