(自用)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 敏感数据需加密存储
相关推荐
西门吹-禅1 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_1 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
skywalk81631 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ19871 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码2 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby2 小时前
Spring Security
java·后端·spring
IT笔记3 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode3 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇3 小时前
C# 运算符重载详解
开发语言·后端·c#
我才是银古3 小时前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri