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 数据,还能提高数据操作的效率。确保键名具有清晰的业务意义,并遵循一致性和简洁性的原则。这样可以在维护和扩展系统时减少错误和混乱。

相关推荐
WuMingf_6 分钟前
redis
数据库·redis
张某布响丸辣13 分钟前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle
P.H. Infinity1 小时前
【RabbitMQ】10-抽取MQ工具
数据库·分布式·rabbitmq
zgscwxd2 小时前
thinkphp6 --数据库操作 增删改查
数据库·thinkphp6
代码小鑫2 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
只是有点小怂2 小时前
受害者缓存(Victim Cache)
缓存
天天要nx2 小时前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
精进攻城狮@2 小时前
Redis(value的数据类型)
数据库·redis
爪哇学长3 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle