如何将值添加到 Spring Data Redis 中的嵌入集
Posted
技术标签:
【中文标题】如何将值添加到 Spring Data Redis 中的嵌入集【英文标题】:How can I add values to an embedded set in Spring Data Redis 【发布时间】:2021-08-29 07:01:40 【问题描述】:我正在编写一个类似聊天的小型应用程序,它基本上有两个实体“房间”和“用户”。数据存储在 Redis 中,因为它的生命周期很短,而且我想熟悉它。
这两种数据结构看起来简化如下。
Room.java
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Reference;
import org.springframework.data.redis.core.RedisHash;
import javax.validation.constraints.Size;
import java.util.List;
@RedisHash("rooms")
@Data
public class Room
@Id
private final String id;
private final String name;
@Reference
private final List<User> participants;
...
User.java
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
@RedisHash("users")
@Data
public class User
@Id
private final Long id;
private final String username;
...
现在我想实现一个joinRoom(String roomId, User user)
方法,它应该将给定的用户附加到房间的参与者集中。
我的第一次尝试是这样的:
读取当前房间 id房间的参与者列表不包含用户,添加它 保存房间我认为这个解决方案是个坏主意,因为应用程序将在多个节点上并行运行,在这里看到竞争条件只是时间问题。
我认为我可以使用Partialupdate,但如果可以附加到嵌入式列表、集合或类似内容,则找不到任何东西。
感谢任何帮助。谢谢!
【问题讨论】:
【参考方案1】:如果您使用 Redisson 作为 Redis 客户端,您应该查看来自客户端的RLock 实现。
Redisson 锁适合分布式用例。
【讨论】:
很好,谢谢!我去看看。以上是关于如何将值添加到 Spring Data Redis 中的嵌入集的主要内容,如果未能解决你的问题,请参考以下文章
spring-data-redis 怎么监听消息队列有消息来了
Spring-data-redis + Lettuce 如何使用 Pipeline