(自用)Java学习-5.12(Redis,B2C电商)

一、Redis 核心知识
  1. 缓存作用

    • 提升性能:内存读写速度(读 10w/s,写 8w/s)远超 MySQL(读 3w/s,写 2w/s)
    • 减少数据库压力:通过内存缓存热点数据,避免频繁 SQL 查询
    • 分类:本地缓存(单机内存) vs 分布式缓存(Redis 集群)
  2. Redis 安装配置

    复制代码
    # Windows安装步骤
    redis-server --service-install redis.windows.conf  # 注册服务
    config set requirepass [密码]                      # 设置密码
    • 客户端工具配置:连接地址127.0.0.1:6379,验证密码
    • 环境变量:配置 Redis 解压目录到系统 Path
  3. Spring Boot 整合 Redis
    依赖配置

    复制代码
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    YML 配置

    复制代码
    spring:
      redis:
        host: 127.0.0.1
        port: 6379
        password: root

    核心操作

    复制代码
    // 注入RedisTemplate操作不同数据结构
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    
    // Value操作示例
    ValueOperations<String, String> vo = redisTemplate.opsForValue();
    vo.set("key", "value", 10, TimeUnit.SECONDS);  // 带过期时间
    
    // Hash操作示例
    HashOperations<String, Object, Object> ho = redisTemplate.opsForHash();
    ho.put("user", "username", "admin");

二、B2C 电商项目架构
  1. 项目结构

    • 父工程zxstshoop:依赖版本管理(MyBatis/Druid/Fastjson)
    • 子模块:
      • shoop_commons:通用工具类(AOP 性能监控、统一 JSON 响应)
      • shoop_customer:业务模块(用户 / 商品 / 订单服务)
  2. 关键技术实现
    AOP 性能监控

    复制代码
    @Aspect
    @Component
    public class TimerUtilAspect {
      @Around("execution(* com.zxst.shoop.service.impl.*.*(..))")
      public Object logTime(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = pjp.proceed();
        System.out.println("耗时:" + (System.currentTimeMillis()-start) + "ms");
        return result;
      }
    }

    登录拦截器

    复制代码
    public class LoginInterceptor implements HandlerInterceptor {
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        Object uid = request.getSession().getAttribute("uid");
        if (uid == null) {
          response.sendRedirect("/web/login.html");  // 未登录跳转
          return false;
        }
        return true;
      }
    }
  3. 数据库与缓存整合

    • 数据源配置(Druid 连接池):

      @Configuration
      public class MyDataSource {
      @Bean
      @ConfigurationProperties("spring.datasource")
      public DataSource dataSource() { return new DruidDataSource(); }
      }

    • MyBatis 配置:

      mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.zxst.shoop.entity


三、最佳实践
  1. 异常处理

    • 自定义异常体系:ServiceException为根基类,派生SaveInfoExceptionDeleteInfoException

    • 全局异常处理:

      @ExceptionHandler(ServiceException.class)
      public JsonResult handleException(Throwable e) {
      JsonResult result = new JsonResult(e);
      if (e instanceof SaveInfoException) result.setCode(40001);
      return result;
      }

  2. 性能优化

    • Redis 缓存策略:高频查询数据(如商品分类)优先缓存
    • 连接池配置:Druid 监控 SQL 执行效率,优化慢查询
  3. 安全规范

    • Session 管理:通过拦截器验证用户登录状态
    • 密码存储:Redis 敏感数据需加密存储
相关推荐
im_AMBER2 小时前
Leetcode 74 K 和数对的最大数目
数据结构·笔记·学习·算法·leetcode
DBA小马哥2 小时前
Oracle迁移实战:如何轻松跨越异构数据库的学习与技术壁垒
数据库·学习·oracle·信创·国产化平替
无敌最俊朗@2 小时前
STL-vector面试剖析(面试复习4)
java·面试·职场和发展
暮乘白帝过重山2 小时前
ArkTS ForEach 参数解析:组件与键值生成器
开发语言·数据库
PPPPickup2 小时前
easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人
java·前端·javascript
【上下求索】3 小时前
学习笔记095——Ubuntu 安装 lrzsz 服务?
运维·笔记·学习·ubuntu
LiamTuc3 小时前
Java构造函数
java·开发语言
三途河畔人3 小时前
Pytho基础语法_运算符
开发语言·python·入门
长安er3 小时前
LeetCode 206/92/25 链表翻转问题-“盒子-标签-纸条模型”
java·数据结构·算法·leetcode·链表·链表翻转
Benmao⁢3 小时前
C语言期末复习笔记
c语言·开发语言·笔记·leetcode·面试·蓝桥杯