redis实战-商户查询缓存

2、商户查询缓存

2.1 什么是缓存?

前言:什么是缓存?

就像自行车,越野车的避震器外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样;

同样,实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪;

这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存技术;

缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如:

1:Static final ConcurrentHashMap<K,V> map = new ConcurrentHashMap<>(); 本地用于高并发

例2:static final Cache<K,V> USER_CACHE = CacheBuilder.newBuilder().build(); 用于redis等缓存

例3:Static final Map<K,V> map =  new HashMap(); 本地缓存

由于其被Static修饰,所以随着类的加载而被加载到内存之中,作为本地缓存,由于其又被final修饰,所以其引用(例3:map)和对象(例3:new HashMap())之间的关系是固定的,不能改变,因此不用担心赋值(=)导致缓存失效;

2.1.1 为什么要使用缓存

一句话:因为速度快,好用

缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力

实际开发过程中,企业的数据量,少则几十万,多则几千万,这么大数据量,如果没有缓存来作为"避震器",系统是几乎撑不住的,所以企业会大量运用到缓存技术;

但是缓存也会增加代码复杂度和运营的成本:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.1.2 如何使用缓存

实际开发中,会构筑多级缓存来使系统运行速度进一步提升,例如:本地缓存与redis中的缓存并发使用

浏览器缓存:主要是存在于浏览器端的缓存

**应用层缓存:**可以分为tomcat本地缓存,比如之前提到的map,或者是使用redis作为缓存

**数据库缓存:**在数据库中有一片空间是 buffer pool,增改查数据都会先加载到mysql的缓存中

**CPU缓存:**当代计算机最大的问题是 cpu性能提升了,但内存读写速度没有跟上,所以为了适应当下的情况,增加了cpu的L1,L2,L3级的缓存

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2 添加商户缓存

在我们查询商户信息时,我们是直接操作从数据库中去进行查询的,大致逻辑是这样,直接查询数据库那肯定慢咯,所以我们需要增加缓存

@GetMapping("/{id}")
public Result queryShopById(@PathVariable("id") Long id) {
    //这里是直接查询数据库
    return shopService.queryById(id);
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Redis完成商户查询缓存功能可以提升系统的性能和可用性,以下是一个基本的实现方法: 1. 当用户请求查询商户信息时,服务端首先从Redis查询缓存,如果缓存中存在该商户信息,则直接返回缓存中的结果,否则进入下一步。 2. 如果Redis缓存中不存在该商户信息,则从数据库中查询,并将查询结果保存到Redis缓存中,同时设置过期时间为一定时间(如1个小时)。 3. 下次用户再次查询商户信息时,由于已经存在缓存中,服务端可以直接从Redis中获取缓存数据,提高查询效率。 下面是一个示例代码: ```python import redis import json # 连接Redis redis_client = redis.Redis(host='localhost', port=6379) # 查询商户信息 def get_merchant_info(merchant_id): # 从Redis缓存中获取商户信息 merchant_info = redis_client.get(f'merchant:{merchant_id}') if merchant_info: return json.loads(merchant_info) # 如果缓存中不存在,则从数据库中查询 merchant_info = query_merchant_info_from_database(merchant_id) # 将查询结果保存到Redis缓存redis_client.set(f'merchant:{merchant_id}', json.dumps(merchant_info)) redis_client.expire(f'merchant:{merchant_id}', 3600) # 设置过期时间为1个小时 return merchant_info # 从数据库中查询商户信息 def query_merchant_info_from_database(merchant_id): # TODO: 实现从数据库中查询商户信息的逻辑 pass ``` 这里使用Redis客户端库`redis`,首先连接到本地的Redis服务器(默认端口为6379),然后定义了两个函数:`get_merchant_info`用于查询商户信息,`query_merchant_info_from_database`用于从数据库中查询商户信息。`get_merchant_info`函数首先从Redis缓存中获取商户信息,如果缓存中不存在,则从数据库中查询,并将查询结果保存到Redis缓存中,同时设置过期时间为1个小时。这样下次用户再次查询商户信息时,由于已经存在缓存中,服务端可以直接从Redis中获取缓存数据,提高查询效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值