Redis(三):Redis数据结构、使用场景及常用命令



Redis 命令参考


Redis数据结构

String(字符串)List(列表)Set(集合)Hash(哈希表)SortedSet(有序集合)
Redis数据结构
String(字符串)
string
List(列表)
list
Set(集合)
set
Hash(哈希表)
hash
SortedSet(有序集合)
sort set

Redis常见应用场景及常用命令


• 排行榜类的应用,取TOP N操作,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序计数器应用
• 存储关系:比如社交关系,比如Tag等

缓存
对于热点数据,缓存以后可能读取数十万次,因此,对于热点数据,缓存的价值非常大。例如,分类栏目更新频率不高,但是绝大多数的页面都需要访问这个数据,因此读取频率相当高,可以考虑基于 Redis 实现缓存。

会话缓存
可以考虑使用 Redis 进行会话缓存。例如,将 web session 存放在 Redis 中。

时效性
例如验证码只有60秒有效期,超过时间无法使用,或者基于 Oauth2 的 Token 只能在 5 分钟内使用一次,超过时间也无法使用。

访问频率
出于减轻服务器的压力或防止恶意的洪水攻击的考虑,需要控制访问频率,例如限制 IP 在一段时间的最大访问量。

计数器
数据统计的需求非常普遍,通过原子递增保持计数。例如,应用数、资源数、点赞数、收藏数、分享数等。

社交列表
社交属性相关的列表信息,例如,用户点赞列表、用户分享列表、用户收藏列表、用户关注列表、用户粉丝列表等,使用 Hash 类型数据结构是个不错的选择。

记录用户判定信息
记录用户判定信息的需求也非常普遍,可以知道一个用户是否进行了某个操作。例如,用户是否点赞、用户是否收藏、用户是否分享等。

交集、并集和差集
在某些场景中,例如社交场景,通过交集、并集和差集运算,可以非常方便地实现共同好友,共同关注,共同偏好等社交关系。

热门列表与排行榜
按照得分进行排序,例如,展示最热、点击率最高、活跃度最高等条件的排名列表。

最新动态
按照时间顺序排列的最新动态,也是一个很好的应用,可以使用 Sorted Set 类型的分数权重存储 Unix 时间戳进行排序。

消息队列
Redis 能作为一个很好的消息队列来使用,依赖 List 类型利用 LPUSH 命令将数据添加到链表头部,通过 BRPOP 命令将元素从链表尾部取出。同时,市面上成熟的消息队列产品有很多,例如 RabbitMQ。因此,更加建议使用 RabbitMQ 作为消息中间件。


Key(键)

TTL key //(获取key的过期时间),以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
KEYS * //查看所有key,匹配数据库中所有 key

Server(服务器)

FLUSHALL //清空整个 Redis 服务器的数据(删除所有数据库的所有 key )

1、String(字符串)

String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。

SET key value //将字符串值 value 关联到 key
GET key //返回 key 所关联的字符串值

INCR key //将 key 中储存的数字值增一
DECR key //将 key 中储存的数字值减一
DECRBY key decrement //将 key 所储存的值减去减量 decrement

MSET key value [key value ...] //同时设置一个或多个 key-value 对
MGET key [key ...] //返回所有(一个或多个)给定 key 的值

EXPIRE key seconds //给指定的key设置过期时间,为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除
PERSIST key //清除过期时间,移除给定 key 的生存时间

STRLEN key //返回 key 所储存的字符串值的长度

使用场景:

常规key-value缓存应用;
常规计数:微博数,粉丝数等。
缓存、限流、计数器、分布式锁、分布式Session


2、List(列表)

list就是链表,Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表,最新消息排行等功能都可以用Redis的list结构来实现。
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。

LPUSH key value [value ...] //将一个或多个值 value 插入到列表 key 的表头
LPOP key //移除并返回列表 key 的头元素

RPUSH key value [value ...] //将一个或多个值 value 插入到列表 key 的表尾(最右边)
RPOP key //移除并返回列表 key 的尾元素

LLEN key //返回列表 key 的长度
LRANGE key start stop //返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

使用场景:

取最新N个数据的操作
可以将最新的50条评论的ID放在List集合
微博的关注列表,粉丝列表,最新消息排行等
可以做简单的消息队列的功能。
可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。


3、Set(集合)

set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的。 当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同喜好、二度好友等功能。

SADD key member [member ...] //增加set,将一个或多个 member 元素加入到集合 key 当中
SCARD key //返回集合 key 的基数(集合中元素的数量)
SISMEMBER key member //是否存在,判断 member 元素是否集合 key 的成员
SMEMBERS key //返回集合 key 中的所有成员
SPOP key //移除并返回集合中的一个随机元素
SUNION key [key ...] //返回一个集合的全部成员,该集合是所有给定集合的并集
SREM key member [member ...] //删除,移除集合 key 中的一个或多个 member 元素

使用场景:

赞、踩、标签、好友关系
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同喜好、二度好友等功能。
利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。
获取某段时间所有数据排重值,使用set,比如某段时间访问的用户ID,或者是客户端IP


4、Hash(哈希表)

Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 比如我们可以Hash数据结构来存储用户信息,商品信息等等。散列(hashes)
举个例子: 最近做的一个电商网站项目的首页就使用了redis的hash数据结构进行缓存,因为一个网站的首页访问量是最大的,所以通常网站的首页可以通过redis缓存来提高性能和并发量。我用jedis客户端来连接和操作我搭建的redis集群或者单机redis,利用jedis可以很容易的对redis进行相关操作,总的来说从搭一个简单的集群到实现redis作为缓存的整个步骤不难。

HSET key field value //将哈希表 key 中的域 field 的值设为 value
HGET key field //返回哈希表 key 中给定域 field 的值
HGETALL key //返回哈希表 key 中,所有的域和值

HMSET key field value [field value ...] //同时将多个 field-value (域-值)对设置到哈希表 key 中
HMGET key field [field ...] //返回哈希表 key 中,一个或多个给定域的值

HLEN key //返回哈希表 key 中域的数量

使用场景:

存储用户信息、用户主页访问量、组合查询,商品信息等
在做单点登录的时候,用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。


5、SortedSet(有序集合)(Zset)

常用命令: zadd,zrange,zrem,zcard
和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
举例: 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用Redis中的SortedSet结构进行存储。

ZADD key score member [[score member] [score member] ...] //将一个或多个 member 元素及其 score 值加入到有序集 key 当中
ZCARD key //返回有序集 key 的基数
ZRANGE key start stop [WITHSCORES] //返回有序集 key 中,指定区间内的成员
ZRANK key member //返回有序集 key 中成员 member 的排名

使用场景:

取TOP N操作
排行榜应用
在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息


Pub/Sub(发布/订阅)


Transaction(事务)

MULTI //标记一个事务块的开始。
EXEC //执行所有事务块内的命令。
DISCARD //取消事务,放弃执行事务块内的所有命令。
UNWATCH //取消 WATCH 命令对所有 key 的监视。
WATCH key [key ...] //监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis(五):Redis事务

— The end —

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值