Redis高级应用专题(未完待续)
Redis 作为时下最流行的内存数据库,广泛应用于大中型企业之中。在大多数企业的日常业务开发中,最常用到的 Redis 功能当属 KV 缓存,它是 Redis 所支持的最基础的功能,广为人知。不广为人知的是, Redis 还支持多种酷炫的高级应用,下文将结合具体的业务场景来介绍这些高级应用。
KV 缓存
Redis 最基础的应用即 KV 缓存,可以用于缓存用户信息、会话信息、商品信息等等。其处理逻辑一般是:用户首次访问系统时,业务数据在 Redis 中查询不到,只能从数据库中读取,在响应数据给用户的同时,存一份到 Redis 中。用户再次发起请求时,系统依然首先尝试从 Redis 中读取,如果获取到数据就直接响应,否则访问数据库读取数据。
随着业务量的增长,Redis 中的数据变的越来越多。但并非每一份数据都会得到高频的使用。有的用户可能登陆一次后,很长时间内都不再上线,如果将该用户的信息长期保存在内存中,是对内存资源的一种浪费,一定程度上也会影响 Redis 的性能。Redis 支持为缓存数据设置 expires 过期时间。超出这个时间,这份数据却没有被访问过,Redis 会把它从内存中剔除。这样可以及时释放内存,保证内存数据库中的数据都是业务热点数据。
试想一款商城应用中,需要将用户相关信息存储在 Redis 中,保证用户在会话期间一直可以使用缓存里面的数据。这时开展了商品秒杀活动,系统访问量陡增,在 Redis 看来所有访问用户的信息都是热点数据,且未到达过期时间,这些数据在这个时点全部涌入内存,极有可能撑爆内存。针对这种场景,Redis 设计了多种数据淘汰策略, 它会在 Redis 内存占用达到预设上限时启用。Redis 支持的5种数据淘汰策略分别是:
# noeviction:写入时如果占用内存达到预设上限,不淘汰任何key,仅返回错误信息
volatile-lru:尝试使用 LRU 算法从设置了过期时间的数据集合中回收key
allkeys-lru:尝试使用 LRU 算法从全部数据中回收key
allkeys-random:从全部数据中随机回收key
volatile-random:在设置了过期时间的数据集合中随机回收key
volatile-ttl:在设置了过期时间的数据集合中回收剩余存活时间最短的key
分布式锁
分布式环境下如何解决临界资源访问问题?