当前位置: 首页 > wzjs >正文

爱用建站网站keywords标签怎么写

爱用建站,网站keywords标签怎么写,健康湖州网站,百度小说排行榜2019以下是 Spring Boot 集成 Redis 对哈希数据的详细操作示例&#xff0c;涵盖不同结构类型&#xff08;基础类型、对象、嵌套结构&#xff09;的完整代码及注释&#xff1a; 1. 集成步骤 1.1 添加依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependency><groupId&g…

以下是 Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释:


1. 集成步骤

1.1 添加依赖

pom.xml 中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId>
</dependency>
1.2 配置 Redis 参数

application.properties 中配置 Redis 服务器信息:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.max-total=8
1.3 自定义 RedisTemplate(支持对象序列化)

配置序列化器以支持复杂对象存储(如 JSON):

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 设置键和值的序列化器template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());template.afterPropertiesSet();return template;}
}

2. 哈希数据操作示例

2.1 存储基础类型(字符串、数字)

场景:存储用户的基本信息(如姓名、年龄)
代码示例

@Service
public class RedisHashService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 存储基础类型数据public void storeSimpleHashData() {String key = "user:1001";redisTemplate.opsForHash().put(key, "name", "Alice"); // 存储字符串redisTemplate.opsForHash().put(key, "age", 30);       // 存储数字redisTemplate.opsForHash().put(key, "active", true);  // 存储布尔值}// 获取哈希字段值public void getSimpleHashData() {String key = "user:1001";Object name = redisTemplate.opsForHash().get(key, "name"); // 输出 "Alice"Object age = redisTemplate.opsForHash().get(key, "age");   // 输出 30}// 删除字段public void deleteHashField() {String key = "user:1001";redisTemplate.opsForHash().delete(key, "age"); // 删除 "age" 字段}
}

2.2 存储对象(如 Java 对象)

场景:将 Java 对象的属性拆分为哈希字段
步骤

  1. 定义实体类:
@Data
public class User {private String name;private int age;private boolean active;
}
  1. 存储对象的属性到哈希字段:
@Service
public class RedisHashService {// 存储对象到哈希(自动拆分属性为字段)public void storeObjectHashData() {String key = "user:1002";User user = new User("Bob", 25, true);// 将对象的属性存储为哈希字段redisTemplate.opsForHash().putAll(key, user); // 等效于:// redisTemplate.opsForHash().put(key, "name", user.getName());// redisTemplate.opsForHash().put(key, "age", user.getAge());}// 获取单个字段public void getObjectField() {String key = "user:1002";Object age = redisTemplate.opsForHash().get(key, "age"); // 输出 25}// 获取所有字段public void getAllFields() {String key = "user:1002";Map<Object, Object> fields = redisTemplate.opsForHash().entries(key);// 输出:{name=Bob, age=25, active=true}}
}

2.3 嵌套结构存储(如对象的子属性)

场景:存储嵌套对象(如用户地址信息)
步骤

  1. 定义嵌套对象:
@Data
public class Address {private String city;private String zipcode;
}@Data
public class UserWithAddress {private String name;private int age;private Address address;
}
  1. 存储嵌套对象到哈希:
@Service
public class RedisHashService {// 存储嵌套对象到哈希public void storeNestedHashData() {String key = "user:1003";UserWithAddress user = new UserWithAddress();user.setName("Charlie");user.setAge(28);user.setAddress(new Address("New York", "10001"));// 使用 JSON 序列化存储整个对象到哈希的 "profile" 字段redisTemplate.opsForHash().put(key, "profile", user);}// 获取嵌套对象public void getNestedHashData() {String key = "user:1003";Object profile = redisTemplate.opsForHash().get(key, "profile");UserWithAddress user = (UserWithAddress) profile;System.out.println(user.getAddress().getCity()); // 输出 "New York"}
}

2.4 批量操作

场景:批量设置、获取或删除哈希字段
代码示例

@Service
public class RedisHashService {// 批量设置字段public void batchSet() {String key = "user:1004";Map<String, Object> fields = new HashMap<>();fields.put("name", "David");fields.put("age", 35);redisTemplate.opsForHash().putAll(key, fields);}// 批量获取字段public void batchGet() {String key = "user:1004";List<Object> values = redisTemplate.opsForHash().multiGet(key, Arrays.asList("name", "age"));// 输出:["David", 35]}// 删除多个字段public void batchDelete() {String key = "user:1004";redisTemplate.opsForHash().delete(key, "age", "active");}
}

2.5 条件更新

场景:仅在字段存在/不存在时更新
代码示例

@Service
public class RedisHashService {// 仅在字段不存在时设置public void setIfAbsent() {String key = "user:1005";redisTemplate.opsForHash().putIfAbsent(key, "name", "Eve"); // 成功设置redisTemplate.opsForHash().putIfAbsent(key, "name", "Frank"); // 不会覆盖}// 原子性递增/递减public void incrementField() {String key = "user:1005";redisTemplate.opsForHash().increment(key, "age", 1); // 若 age 不存在,初始值为1}
}

3. 总结表格

操作类型功能Spring Boot 方法代码示例
存储单个字段存储键值对到哈希opsForHash().put(key, field, value)put("user:1001", "name", "Alice");
存储多个字段批量存储字段opsForHash().putAll(key, map)putAll("user:1002", {"age":30, "active":true});
获取单个字段获取指定字段值opsForHash().get(key, field)get("user:1001", "age");
获取所有字段获取哈希下所有字段opsForHash().entries(key)entries("user:1001");
删除字段删除指定字段opsForHash().delete(key, field)delete("user:1001", "age");
条件设置仅在字段不存在时设置opsForHash().putIfAbsent(key, field, value)putIfAbsent("user:1001", "name", "Bob");
原子性计算字段值递增/递减opsForHash().increment(key, field, delta)increment("user:1001", "score", 5);

关键点总结

  1. 序列化配置:通过 GenericJackson2JsonRedisSerializer 支持复杂对象的序列化。
  2. 哈希操作:通过 RedisTemplate.opsForHash() 实现字段级操作。
  3. 嵌套结构:将对象序列化为 JSON 存储到单个哈希字段中,或拆分为多个字段。
  4. 批量操作:使用 putAllmultiGetdelete 等方法提升效率。
  5. 原子性操作:通过 increment 实现无锁计数,putIfAbsent 实现条件存储。

通过以上示例,可以灵活操作 Redis 哈希类型,满足不同场景下的数据存储和计算需求。


文章转载自:

http://UXbvo4pi.LLxqj.cn
http://zaW0SymC.LLxqj.cn
http://NTLTU3xj.LLxqj.cn
http://1WKDPuBf.LLxqj.cn
http://oOMFHOo5.LLxqj.cn
http://zaHaUbCc.LLxqj.cn
http://okQVHFCm.LLxqj.cn
http://5iz3iTLN.LLxqj.cn
http://g9QIaHUt.LLxqj.cn
http://2e9VTWhU.LLxqj.cn
http://M86q0ooy.LLxqj.cn
http://5kjKtqJK.LLxqj.cn
http://hr2BnHVN.LLxqj.cn
http://zhcsBwQg.LLxqj.cn
http://otg3NL7y.LLxqj.cn
http://Ncgadtvu.LLxqj.cn
http://VyjG7yDo.LLxqj.cn
http://bOrbuZy5.LLxqj.cn
http://BvMuWNBY.LLxqj.cn
http://ZUbou1x6.LLxqj.cn
http://spoqgNfN.LLxqj.cn
http://cucooQDJ.LLxqj.cn
http://NWHjbmKM.LLxqj.cn
http://8RskuB0c.LLxqj.cn
http://P1oM0Fa0.LLxqj.cn
http://2ruwHbbM.LLxqj.cn
http://FDL7QKL2.LLxqj.cn
http://JqZvCVQy.LLxqj.cn
http://hxVvZXvr.LLxqj.cn
http://B6xNe79t.LLxqj.cn
http://www.dtcms.com/wzjs/769194.html

相关文章:

  • 教育培训机构网站源码学编程在哪里学比较正规
  • python做电商网站淘宝客免费网站建设
  • 网上书城网站开发背景wordpress完美商城
  • 微网站建设教程浙江省建设执业资格中心网站
  • 为公司做的图可以上传网站吗网站做响应式还是移动端
  • 怎么做qq代挂网站百度seo关键词优化推荐
  • 广州网站建设报价单邢台做移动网站费用
  • 手机网站一键导航代码自己怎么健网站视频教程
  • 建设一个网站价格介绍国外的网站有什么不同
  • 无锡企业网站的建设温州网站推广好不好
  • wordpress设置网站首页恒美广告公司
  • 在线申请网站tdk优化文档
  • 做网站先学什么国内设计好的网站案例
  • 北京免费建站网络营销网站建设 项目要求
  • 专业的外贸行业网站开发海外转运网站建设
  • 数据库与网站建设的关系上海seo网站优化软件
  • 网站是指什么常用博客建站程序
  • 最近网站不收录企业退休做认证进哪个网站
  • 大学生做网站兼职网站建设属于什么合同
  • 企业网站尺寸网站开发进度管理表
  • 郑州网站建设七彩科技建设电子商务网站的好处
  • 怎么做国外的网站 卖东西wordpress文章目录树
  • 深圳罗湖网站设计公司价格南江移动网站建设
  • 微信彩票网站网站建设如何在南美做网站推广
  • 网站建设的费用包括哪些内容如何申请免费企业邮箱
  • 免费网站推广入口上海建设工程检测登记的网站
  • .tv可以做门户网站不建设一个商城式网站可以吗
  • 软文发布网站网站域名解绑
  • 手工艺品网站建设侧胡顺昆明seo排名外包
  • 中国建设银行互联网网站贡井移动网站建设