Redis是一个基于内存的键值对数据库,它的键都是字符串类型,而值的部分支持5种数据类型,每种类型特点不一样
我们项目中有两处地方用到了Redis,分别是:店铺营业状态标识和小程序端的套餐、菜品列表数据
店铺营业状态标识,仅仅需要在redis中保存一个0|1值即可。这里之所以选择redis,有两个原因
而没有采用数据库来存储,就是因为这个字段太简单了,没有必要在数据库中新建一张表
这个状态访问比较频繁,放在redis中,提高了查询速度的同时,可以减轻数据库的访问压力
小程序端的套餐、菜品列表数据,由于小程序端以后的访问量比较大,所以采用Redis提高访问速度
具体的操作步骤就是:在查询列表的时候,先判断Redis缓存中是否有数据,如果有,直接返回给前端
如果没有,再去查询数据库,并将查询结果保存到redis中的同时,再返回给前端
为了保证Redis和数据库中数据的实时一致性,在对数据库相关数据进行增删改操作时,需要同时清理Redis中数据
SpringCache是Spring提供的一个缓存框架,它可以通过简单的注解实现缓存的操作,我们常用的注解有下面几个:
@EnableCaching: 开启基于注解的缓存
@CachePut: 一般用在查询方法上,表示将方法的返回值放到缓存中
@Cacheable: 一般用在查询方法上,表示在方法执行前先查看缓存中是否有数据,如果有直接返回;如果没有,再调用方法体查询数据并将返回结果放到缓存中;他有两个关键属性:
value: 缓存的名称,每个缓存名称下面可以有多个key
key: 缓存的key,支持Spring的表达式语言SPEL语法
@CacheEvict: 一般用在增删改方法上 ,用于清理指定缓存,可以根据key清理,也可以清理整个value下的缓存
SpringCache还有一个有点,就是可以随意切换底层的缓存软件,比如:Redis、内存等等
本项目中菜品和套餐列表的缓存用到了SpringCache
整个微信支付流程涉及到三个角色:微信小程序、服务端、微信平台
SpringTask是Spring框架提供的一种任务调度工具,用来按照定义的时间格式执行某段代码。
它的一个关键注解是@Scheduled,此注解标注在方法上,用于设置方法的调用时机,它支持下面一些属性:
在我们的项目中,超时订单的状态改变用到了SpringTask,比如:
cron表达式其实就是一个字符串,通过cron表达式可以定义任务的触发时间
SpringTask支持的cron表达式分为6个域,由空格分隔开,每个域代表一个含义:秒 分 时 日 月 周
每个域都支持精准数值的写法,也支持一些具有特殊意义的字符,主要的有下面这些:
*:表示任意
?:表示忽略,只能用在日
和周
两个域
-:表示区间,
/:表示起始时间开始触发,然后每隔固定时间触发一次
,:表示列出枚举值,例如在分
域使用5,20则意味着在5和20分触发一次
#: 用于确定每个月第几个星期几
HTTP的通信是单向的,要先请求后响应,类似于对讲机
WebSocket的通信双向的、实时的,客户端和服务端可以同时发消息,类似于手机通话
我们在项目中大部分场景下都是使用HTTP协议,只有在高实时场景下,建议使用WebSocket
项目在向商家提醒接单时,用户催单发送提醒时使用了webSocket
Excel技术方案有:ApachePOI和EasyExcel等,EasyExcel是在POI的基础上进行二次开发的
POI的封装度较低,使用时需要写大量的代码,并且性能也比较低,同时它是对文档一次性导入,容易导致内存溢出
EasyExcel的封装度比较高,使用起来比较方便,而且它是一条条导入数据,不会导致内存溢出
在实际开发中,更倾向于使用稳定性更好的方案,所以一般选择EasyExcel作为Excel的导入导出技术方案