文章

Redis的应用场景

Redis的应用场景

Redis的应用场景

计数器

可以对String进行自增自减运算,从而实现计数器功能。Redis这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量

缓存

将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率

会话缓存

可以使用Redis来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

全页缓存(FPC)

除了基本的会话token之外,Redis还提供很简便的FPC平台。以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾经浏览过的页面

查找表

例如:DNS记录就很适合用Redis来存储。查找表和缓存类似,也是利用了Redis快速查找的特性。但是查找表的内容不能失效,而缓存的内容可以失效(缓存不作为可靠的数据来源)

消息队列(pub/sub功能)

List是一个双向链表,可以通过lpush和rpop写入和读取消息。不过最好使用Kafka、RabbitMQ等消息中间件(更可靠,更稳定)

分布式锁实现

在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。可以使用Redis自带的Setnx命令来实现分布式锁,除此之外,还可以使用官方提供的RedLock分布式锁实现。当且仅当key不存在,将key的值设置为value。若给定的key已经存在,则SETNX不做任何动作

其他

Set可以实现交集、并集等操作,从而实现共同好友等功能。Zset可以实现有序性操作,从而实现排行榜等功能

  • String:适合最简单的k-v存储,短息验证码,配置信息等,就用这种类型来存储。
  • hash:适合id-detail存储,比如个人信息详情,filed为id,value为详情。
  • list:因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如:省市区、字典表等。因为list是有序的,适合根据写入时间来排序,如:最新的xxx、消息队列等。
  • set:理解为ID-list模式,如微博中一个人有哪些好友,set最牛的地方在于,可以对两个set提供交集、并集、差集操作。例如:查找两个人的共同好友。
  • Sorted Set:set的增强版本,增加了一个score参数,会根据score的值进行自动排序。比较适合类似于top10等不根据插入时间来排序的数据。
本文由作者按照 CC BY 4.0 进行授权