Redis实操步骤以及命名细节

1.Redis实现步骤

在 Java 中操作 Redis 通常涉及使用 Redis 客户端库,例如 Jedis 或 Spring Data Redis。下面是一个基于 Spring Data Redis 的实现步骤,包括环境配置、连接 Redis、基本操作等。

步骤 1: 添加依赖

如果你使用 Maven,可以在 pom.xml 中添加以下依赖:

XML 复制代码
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.7.2</version>
        </dependency>
        
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.9.0</version>
        </dependency>

    
        //redis连接池依赖(因为Jedis和Lettuce底层都会基于commons-pool来实现连接池效果)
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

步骤 2: 配置 Redis 连接

在 application.yml 中配置 Redis 连接信息。

使用 application.yml 文件:

XML 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password: your_redis_password  # 如果 Redis 设置了密码,则加入此行

步骤 3: 创建 Redis 配置类

如果需要自定义连接设置,可以创建一个配置类:

java 复制代码
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    //RedisTemplate 是一个通用的 Redis 操作模板,它支持对 Redis 中多种数据结构的操作
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

    //支持对 Redis 中字符串结构的操作
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory jedisConnectionFactory) {
        return new StringRedisTemplate(jedisConnectionFactory);
  }
}

步骤 4: 使用 Redis 进行基本操作

使用 StringRedisTemplate 进行基本的 Redis 操作,下面是一个简单的示例:

java 复制代码
@GetMapping("/select/{id}")
    public Result selectOne(@PathVariable Long id) throws JsonProcessingException {
        // 使用用户ID作为 Redis 键的一部分
        String redisKey = USER_SELECT + ":" + id;

        // 尝试从 Redis 中获取数据
        String userJson = stringRedisTemplate.opsForValue().get(redisKey);

        // 如果缓存中有数据,则直接返回
        if (userJson != null) {
            log.info("从 Redis 缓存中获取用户信息");
            return Result.success(userJson);
        }

        // 如果缓存中没有数据,则从数据库中查询
        User user = userService.selectByUser(id);

        // 将对象序列化为 JSON 字符串
        userJson = objectMapper.writeValueAsString(user);

        // 将数据存储到 Redis 中,设置过期时间为 5 分钟
        stringRedisTemplate.opsForValue().set(redisKey, userJson, 5, TimeUnit.MINUTES);

        log.info("从数据库中查询用户信息");
        return Result.success(userJson);
    }

2.Redis的Key命名规范

在使用 Redis 时,合理的键命名规范能够帮助你更好地组织和管理数据。以下是一些常见的 Redis 键命名规范和最佳实践:

1. 前缀命名

  • 作用: 使用前缀可以帮助你将 Redis 键按照业务或功能进行分组,避免键名冲突。
  • 示例 :
    • user:1000:name 表示用户 ID 为 1000 的名字。
    • order:2024:12345:status 表示订单 ID 为 12345 的状态。

2. 分隔符

  • 作用 : 使用分隔符(如冒号 :)可以使键名更具层次感,便于理解和管理。
  • 示例 :
    • product:category:electronics 表示电子产品类别。
    • session:userid:5678 表示用户 ID 为 5678 的会话信息。

3. 命名规范

  • 避免使用特殊字符: 尽量避免在键中使用特殊字符,尤其是在分布式系统中。
  • 简洁明了: 键名应该简洁且具有描述性,能清楚地表示存储的数据含义。
  • 使用小写字母: 通常建议使用小写字母,这样可以避免由于大小写不一致造成的错误。
  • 一致性: 保持键名的一致性,遵循统一的命名规则,便于团队成员理解和维护。

4. 避免长键名

  • 原因: 虽然 Redis 对键名长度没有严格限制,但过长的键名可能会影响性能,并且使得日志和监控信息难以阅读。
  • 示例 :
    • 推荐: user:1234:email
    • 不推荐: user:1234:account:details:and:settings:email:address

5. 避免存储敏感数据

  • 原因: 避免在 Redis 中存储敏感信息,如密码或个人身份信息,因为 Redis 默认没有加密功能。
  • 示例: 对于敏感数据,可以考虑使用加密存储方案或者在应用层面处理加密。

6. 考虑数据的生命周期

  • 作用: 有些数据可能有过期时间,合理的键命名有助于管理数据的生命周期。
  • 示例 :
    • cache:user:1000 表示缓存的用户数据,缓存时间到期后可以删除。
    • session:expired:user:1234 表示已过期的会话数据。

7. 使用命名空间

  • 作用: 如果有多个应用使用同一 Redis 实例,可以使用命名空间来避免冲突。
  • 示例 :
    • app1:user:1000
    • app2:product:2000

总结

合理的键命名规范不仅可以帮助你更好地组织和管理 Redis 数据,还能提高数据操作的效率。确保键名具有清晰的业务意义,并遵循一致性和简洁性的原则。这样可以在维护和扩展系统时减少错误和混乱。

相关推荐
一码归一码@35 分钟前
Mysql进阶之事务原理
数据库·mysql
老邓计算机毕设8 小时前
SSM学生选课系统xvbna(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生选课系统·ssm 框架·高校教学管理
難釋懷8 小时前
SpringDataRedis数据序列化器
redis·缓存
枷锁—sha8 小时前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
逍遥德10 小时前
PostgreSQL 中唯一约束(UNIQUE CONSTRAINT) 和唯一索引(UNIQUE INDEX) 的核心区别
数据库·sql·postgresql·dba
工业甲酰苯胺10 小时前
字符串分割并展开成表格的SQL实现方法
数据库·sql
科技块儿11 小时前
IP定位技术:游戏反外挂体系中的精准识别引擎
数据库·tcp/ip·游戏
衫水11 小时前
[特殊字符] MySQL 常用指令大全
数据库·mysql·oracle
卓怡学长11 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
小句12 小时前
SQL中JOIN语法详解 GROUP BY语法详解
数据库·sql