Redis实操步骤以及命名细节

server/2024/9/25 4:33:01/

1.Redis实现步骤

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

步骤 1: 添加依赖


如果你使用 Maven,可以在 pom.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 文件:

spring:redis:host: localhostport: 6379password: your_redis_password  # 如果 Redis 设置了密码,则加入此行

步骤 3: 创建 Redis 配置类

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

@Configuration
public class RedisConfig extends CachingConfigurerSupport {//RedisTemplate 是一个通用的 Redis 操作模板,它支持对 Redis 中多种数据结构的操作@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();//默认的Key序列化器为:JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}//支持对 Redis 中字符串结构的操作@Beanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory jedisConnectionFactory) {return new StringRedisTemplate(jedisConnectionFactory);}
}

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

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

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


http://www.ppmy.cn/server/90353.html

相关文章

一款允许使用Docker部署本地托管的、基于 Web 的 PDF 操作工具

大家好&#xff0c;今天给大家分享的是一个基于Spring Boot开发的开源项目&#xff0c;旨在提供一个功能强大的基于Docker的本地托管PDF操作工具Stirling PDF。 项目介绍 Stirling-PDF是一个全面的PDF工具箱&#xff0c;适用于个人和企业用户&#xff0c;尤其对于那些重视数据…

服务器数据恢复—raid信息丢失导致RAID无法被识别的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某单位机房搬迁&#xff0c;将所有服务器和存储搬迁到新机房并重新连接线路&#xff0c;启动所有机器发现其中有一台服务器无法识别RAID&#xff0c;提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统&#xff0c;配置了NF…

[极客大挑战 2019]PHP1

打开靶机 提示有备份&#xff0c;可以用工具扫描&#xff0c;我还没有配置好环境&#xff0c;搜了一下其他师傅的&#xff1a;备份的地址在这&#xff1a; /www.zip 下载后得到这几个文件&#xff1a; index.php就是上面打开的网页&#xff0c;其中有一段php代码&#xff1a;…

我在高职教STM32——串口通信(5)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…

Go语言入门之错误处理

Go语言入门之错误处理 错误处理是开发中必不可少的一个部分&#xff0c;go中的错误一般有两种&#xff0c;一种为error&#xff0c;一种为panic go语言通常返回一个错误值&#xff0c;然后检查错误值是否为nil&#xff0c;以此判断函数是否执行 1.Error Go使用error接口来表示一…

3D建模软件--犀牛Rhino for Mac

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

PHP面向对象

PHP 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它允许开发者将代码组织成类和对象&#xff0c;从而提高代码的可维护性、可扩展性和复用性。以下是 PHP 面向对象的详细教程&#xff0c;包括面向对象的创建教程和使用方法。 一、面向对象的基本概念 …

Layui Selcet选择框动态选择问题

前言 时隔多日我也是重新回归写作&#xff0c;高考已经完毕&#xff0c;我将继续我的文章创作&#xff0c;今天我将分享的是我在开发我自己的一个新项目所遇到的问题&#xff0c;这里预告一下我的新项目: VitaApi管理系统 这个系统可以看作是萌新源api管理系统的延续&#xff…