当前位置: 首页 > news >正文

网站备案平台查询系统网站排名优化公司

网站备案平台查询系统,网站排名优化公司,专门找事做的网站,网络优化面试问题Redis多数据库存储实现用户行为缓存 在我的系统中,为了优化用户行为数据的存储与访问效率,我引入了Redis缓存,并将数据分布在不同的Redis数据库中。通过这种方式,可以减少单一数据库的负载,提高系统的整体性能。 主要…

Redis多数据库存储实现用户行为缓存

在我的系统中,为了优化用户行为数据的存储与访问效率,我引入了Redis缓存,并将数据分布在不同的Redis数据库中。通过这种方式,可以减少单一数据库的负载,提高系统的整体性能。

主要实现步骤
  1. Redis配置

    • 配置两个Redis连接工厂,分别用于存储Token和用户行为数据。
    • 创建对应的RedisTemplate实例,指定不同的连接工厂及序列化方式。
  2. 用户行为服务

    • 通过UserBehaviorService接口及其实现类UserBehaviorServiceImpl,实现对用户点赞、收藏、评论、浏览行为的记录。
    • 在操作数据库的同时,将用户行为数据存储到Redis中以提高读取效率。
  3. Token拦截器

    • 使用TokenInterceptor类在每次请求前验证Token。
    • 验证通过后,将用户信息存储到ThreadLocal中,供后续操作使用。
代码实现
Redis配置类
@Configuration
public class RedisConfig {@Value("${spring.data.redis.host}")private String redisHost;@Value("${spring.data.redis.port}")private int redisPort;@Value("${spring.data.redis.password}")private String redisPassword;@Bean(name = "tokenRedisConnectionFactory")public RedisConnectionFactory tokenRedisConnectionFactory() {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort);config.setPassword(redisPassword);config.setDatabase(0);return new LettuceConnectionFactory(config);}@Bean(name = "userBehaviorRedisConnectionFactory")public RedisConnectionFactory userBehaviorRedisConnectionFactory() {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort);config.setPassword(redisPassword);config.setDatabase(1);return new LettuceConnectionFactory(config);}@Bean(name = "redisTemplate")public StringRedisTemplate redisTemplate(@Qualifier("tokenRedisConnectionFactory") RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());return template;}@Bean(name = "userBehaviorRedisTemplate")public RedisTemplate<String, Map<String, Integer>> userBehaviorRedisTemplate(@Qualifier("userBehaviorRedisConnectionFactory") RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Map<String, Integer>> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Map.class));return template;}
}
用户行为服务实现类
@Service
public class UserBehaviorServiceImpl implements UserBehaviorService {private static final long CACHE_EXPIRATION_DAYS = 1;private static final String CACHE_PREFIX = "articleCounts:";@Autowiredprivate UserBehaviorMapper userBehaviorMapper;@Autowired@Qualifier("userBehaviorRedisTemplate")private RedisTemplate<String, Map<String, Integer>> userBehaviorRedisTemplate;@Overridepublic void setLikeArticle(Likes likes) {likes.setCreateTime(LocalDateTime.now());Integer userId = ThreadLocalUtil.getUser("id");if (userId != null) {likes.setUserId(userId);}userBehaviorMapper.insertLike(likes);}@Overridepublic void setFavoriteArticle(Favorites favorites) {favorites.setCreateTime(LocalDateTime.now());Integer userId = ThreadLocalUtil.getUser("id");if (userId != null) {favorites.setUserId(userId);}userBehaviorMapper.insertFavorite(favorites);}@Overridepublic void setCommentArticle(Comments comments) {comments.setCreateTime(LocalDateTime.now());Integer userId = ThreadLocalUtil.getUser("id");if (userId != null) {comments.setUserId(userId);}userBehaviorMapper.insertComment(comments);}@Overridepublic void setViewArticle(Views views) {views.setCreateTime(LocalDateTime.now());Integer userId = ThreadLocalUtil.getUser("id");if (userId != null) {views.setUserId(userId);}userBehaviorMapper.insertView(views);}@Overridepublic Map<String, Integer> getArticleCounts(Integer articleId) {String key = CACHE_PREFIX + articleId;Map<String, Integer> counts = userBehaviorRedisTemplate.opsForValue().get(key);if (counts == null) {counts = fetchArticleCountsFromDB(articleId);cacheArticleCounts(articleId, counts);}return counts;}private Map<String, Integer> fetchArticleCountsFromDB(Integer articleId) {Map<String, Integer> counts = new HashMap<>();counts.put("likesCount", userBehaviorMapper.selectLikesCount(articleId));counts.put("favoritesCount", userBehaviorMapper.selectFavoritesCount(articleId));counts.put("commentsCount", userBehaviorMapper.selectCommentsCount(articleId));counts.put("viewsCount", userBehaviorMapper.selectViewsCount(articleId));return counts;}private void cacheArticleCounts(Integer articleId, Map<String, Integer> counts) {String key = CACHE_PREFIX + articleId;userBehaviorRedisTemplate.opsForValue().set(key, counts, CACHE_EXPIRATION_DAYS, TimeUnit.DAYS);}
}
Token拦截器
@Component
public class TokenInterceptor implements HandlerInterceptor {@Autowiredprivate StringRedisTemplate redisTemplate;@Overridepublic boolean preHandle(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) throws Exception {String token = request.getHeader("Authorization");if (token == null || token.isEmpty()) {response.setStatus(HttpStatus.UNAUTHORIZED.value());return false;}try {ValueOperations<String, String> operations = redisTemplate.opsForValue();String redisToken = operations.get(token);if (redisToken == null) {response.setStatus(HttpStatus.UNAUTHORIZED.value());return false;}Map<String, Object> claims = JwtUtil.parseToken(token);ThreadLocalUtil.setUser(claims);return true;} catch (Exception e) {response.setStatus(HttpStatus.UNAUTHORIZED.value());return false;}}@Overridepublic void postHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler, Exception ex) throws Exception {ThreadLocalUtil.remove();}
}
http://www.hkea.cn/news/799428/

相关文章:

  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件
  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么
  • 微信小程序怎么制作游戏安卓优化清理大师
  • 胶南做网站初学者做电商怎么入手
  • 网站为什么要维护佛山网络营销推广
  • 国企网站建设报告怎么建造自己的网站
  • 免费做司考真题的网站余姚网站如何进行优化
  • 如何网站开发1688网站
  • 丽水专业网站建设价格青岛网站优化
  • 网站开发专业培训学校百度推广登录官网入口