(PHP)redis Hash(哈希)和 Set(集合)操作

Hash

/**
 *
 * Hash操作
 * 哈希操作
 * 可理解为数据库操作
 * 
 */

//为user表中的字段赋值。成功返回1,失败返回0。若user表不存在会先创建表再赋值,若字段已存在会覆盖旧值。
$redis->hSet('user', 'name', '222');

//获取user表中指定字段的值。若user表不存在则返回false。
$redis->hGet('user', 'realname');

//查看user表的某个字段是否存在,存在返回true,否则返回false。
$redis->hExists('user', 'realname');

//删除user表的一个字段,不支持删除多个字段。成功返回1,否则返回0。
$redis->hDel('user', '222');

//同时设置某个user表的多个字段值。成功返回true。
$redis->hMset('user', ['name' => 'jet', 'age' => 18]);

//同时获取某个user表的多个字段值。其中不存在的字段值为false。
$redis->hMget('user', ['name', 'age']);

//获取某个user表所有的字段和值。
$redis->hGetAll('user');

//获取某个user表所有字段名。user表不存在时返回空数组,key不为user表时返回false。
$redis->hKeys('user');

//获取某个user表所有字段值。
$redis->hVals('user');

//为user表中不存在的字段赋值。若user表不存在则先创建,若字段已存在则不做任何操作。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,在Spring Boot项目中,需要引入Redis和MySQL的相关依赖。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 接着,需要配置Redis和MySQL的连接参数。在application.properties中添加以下配置: ```properties # Redis spring.redis.host=localhost spring.redis.port=6379 # MySQL spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 然后,创建一个RedisUtil工具类,实现Redis数据的存储和读取。具体实现过程如下: ```java @Component public class RedisUtil { private RedisTemplate<String, Object> redisTemplate; @Autowired public RedisUtil(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } // 存储键值对 public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } // 获取键对应的值 public Object get(String key) { return redisTemplate.opsForValue().get(key); } // 哈希存储 public void hset(String key, String hashKey, Object value) { redisTemplate.opsForHash().put(key, hashKey, value); } // 哈希读取 public Object hget(String key, String hashKey) { return redisTemplate.opsForHash().get(key, hashKey); } } ``` 接下来,我们需要创建一个服务类来实现点赞数量的同步。首先,需要定义一个点赞实体类Like。该类包含两个属性:点赞用户ID和点赞时间。 ```java @Entity public class Like { @Id private Long userId; @Temporal(TemporalType.TIMESTAMP) private Date timestamp; // Getters and Setters } ``` 然后,创建点赞服务LikeService,用于实现两个功能:记录点赞和获取点赞数量。具体实现如下: ```java @Service public class LikeService { @Autowired private RedisUtil redisUtil; @Autowired private LikeRepository likeRepository; // 记录点赞 public void like(Long postId, Long userId) { // 1. 更新Redis中的点赞数量 String key = "posts:" + postId + ":likes"; redisUtil.hset(key, String.valueOf(userId), true); // 2. 记录点赞用户ID和时间 Like like = new Like(); like.setUserId(userId); like.setTimestamp(new Date()); likeRepository.save(like); } // 获取点赞数量 public Long getLikeCount(Long postId) { String key = "posts:" + postId + ":likes"; Map<Object, Object> resultMap = redisUtil.redisTemplate.opsForHash().entries(key); return Long.valueOf(resultMap.size()); } } ``` 上述代码中,记录点赞时,我们先通过RedisUtil将点赞数量保存Redis中。同时,我们还要将点赞用户ID和时间记录到MySQL中。在获取点赞数量时,我们先通过RedisUtil从Redis中读取点赞数量,如果Redis中没有相应的记录,就从MySQL中读取点赞数量。最后,将点赞数量返回。 最后,我们需要在Controller中实现点赞操作和获取点赞数量的接口。具体实现如下: ```java @RestController @RequestMapping("/posts") public class PostController { @Autowired private LikeService likeService; // 点赞接口 @PostMapping("/{postId}/like") public ResponseEntity<ApiResponse> like(@PathVariable Long postId, @RequestParam Long userId) { likeService.like(postId, userId); return ResponseEntity.ok(ApiResponse.success()); } // 获取点赞数量接口 @GetMapping("/{postId}/likeCount") public ResponseEntity<ApiResponse> getLikeCount(@PathVariable Long postId) { Long likeCount = likeService.getLikeCount(postId); Map<String, Object> data = new HashMap<>(); data.put("likeCount", likeCount); return ResponseEntity.ok(ApiResponse.success(data)); } } ``` 以上就是将Redis哈希点赞数量同步到MySQL用Spring Boot实现的方法。通过这种方式,可以大大提高系统的性能和并发处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值