利用Redis缓存提升业务性能(一般哪些业务放redis)
背景:
现在,相信大部分业务都使用 Redis 作为请求的缓存存储结构。随着业务的不断增长,系统流量和数据量不断增加,势必会造成访问数据库带来的拖慢业务处理和性能问题,所以一定程度上提升系统性能就必须要借助于Redis的缓存帮助。
缓存的理解:
所谓的缓存(Cache),就是一种存储最常访问的数据的临时内存,缓存把常用的数据放到内存中,减少与外部数据的交互,从而提高系统的处理效率,缩短响应性能所需的时间。
利用 Redis 缓存提升业务性能:
利用 Redis 缓存技术可以减少应用程序对数据库的访问,节省 I/O 资源,提高对请求的响应时间,从而提高业务性能。
一般来说,将业务中经常使用到的数据进行缓存,就可以缩短请求查询数据库或访问其他后端程序的时间。
借助Redis可以通过以下3个方面提升业务性能:
(1)减少系统的 IO 次数:在业务中需要访问数据库多次,这种情况下比较适合采用 Redis 缓存技术来减少 IO 的次数,从而提升系统处理能力,减少响应时间。
(2)提升系统的响应能力:拥有系统良好的响应能力,当用户发送请求时,尽可能快的获取响应内容,从而提升业务性能。
(3)缩短查询数据库/访问其他后端程序的时间:将常用的数据放到 Redis 缓存中,以减少和外部数据的交互,缩短响应性能所需的时间,从而提升业务性能。
例子:
假设有一种简单的电商业务,有一个获取商品信息的请求,如果把每次请求都查询数据库,获取商品信息,那么每次响应时间都会很慢,出现体验不够流畅的情况。可以通过 redis 缓存这些静态数据,保存在 Redis 缓存中,当请求商品信息时,先从 Redis 中获取,如果有,则从 Redis 中获取,如果没有,则从数据库中获取,并把数据存入 Redis,这样就可以避免每次都访问数据库,极大的提升了响应时间,从而提升业务性能。
python 代码如下:
#将商品信息存入redis
import redis
r = redis.Redis(host=”localhost”, port=6379, db=0)
# 设置键 key = ‘product_id’ , 将商品信息存入Redis,定义超时时间为 10 分钟
r.setex(key, 10 * 60, ‘product_info’)
#从 redis 中获取商品信息
import redis
r = redis.Redis(host=”localhost”, port=6379, db=0)
# 获取 key = ‘product_id’ 的商品信息
product_info = r.get(key)
if product_info is None: # 如果在Redis中找不到对应的值,则查询数据库
product_info = query_db()
r.setex(key, 10 * 60, product_info) # 以 key = ‘product_id’的键,把商品信息存入redis,定义超时时间为 10 分钟
结论:
Redis 缓存技术实现绝对是有效应对上面提到的 IO 问题,但是使用不当会造成缓存击穿、缓存雪崩等问题