广州申请公司注册网站,网络管理系统包括哪五大功能,做网站需要的素材资料,上海网站建设穹拓背景 现实中#xff0c;本地环境#xff08;dev#xff09;和开发环境#xff08;feature#xff09;会共同使用相同的中间件#xff08;本篇拿Redis举例#xff09;#xff0c;对于不同环境中的#xff0c;图片、视频、语音等资源类型的预览地址url#xff0c;需要配…背景 现实中本地环境dev和开发环境feature会共同使用相同的中间件本篇拿Redis举例对于不同环境中的图片、视频、语音等资源类型的预览地址url需要配置不同的ip和port地址如何优美的解决它
解决方案
使用配置不同环境配置不同的 数据库索引database: 0-15但随之引起的问题就是如果Redis是集群怎么办Redis 集群不像单机版本的 Redis 那样支持多个数据库集群只有数据库 0而且也不支持 SELECT 命令。对于资源型url数据使用相对路径到门户层或者前端自己拼接这种深入业务的使用方式需要很多程序员的协作并且花费很多沟通、文档、测试时间最不可取话分两头如果是大型项目并且无法保证公网ip或域名唯一的项目也只能通过业务方式解决使用Cacheable 的keyGenerator 属性不同环境生成不同的缓存key, 从而保证不同公网访问的数据中 图片、视频等预览地址不同这样顺便解决不同公网的跨域问题
keyGenerator 使用
项目中添加下方类CacheKeyGenerator
import java.lang.reflect.Method;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;Component
Slf4j
public class CacheKeyGenerator implements KeyGenerator {Value(${spring.profiles.active})private String profilesActive;Overridepublic Object generate(Object target, Method method, Object... params) {Long id (Long) params[0];String cacheKey new StringBuilder(profilesActive).append(_).append(id).toString();log.info([cacheKeyGenerate],cacheKey{}, cacheKey);return cacheKey;}}在需要缓存的Service方法上添加Cacheable注解
Cacheable(cacheNames CacheNames.DETAIL, keyGenerator cacheKeyGenerator)
public XXXXVo queryById(Long id){XXXX;return vo;
}
//请原谅不能贴源码出来
redis下存储最终效果