问题指的是redis的分片配置。我用 Java 实现了一个小型测试应用程序,它以 user:userID 的形式在 Jedis 上创建了 100.000 个用户哈希。每个散列都有以下元素:姓名、电话、部门、用户 ID。我还使用关键电话:电话号码创建了简单的键值对,其中包含电话号码为 ID 的用户 ID,并为每个部门设置了为该特定部门工作的用户 ID。后两种类型我仅用于搜索。这些结构和搜索类似于Searching in values of a redis db。
简而言之,数据结构:
user:userID->{name, department, phone, userID}
department:department->([userID1, userID2,....])
phone:phone->userID
搜索的用例:
- 基于密钥(即用户ID)访问用户哈希
- 搜索有电话号码的用户
- 搜索部门的所有用户
在单实例和分片配置中一切正常,但我会有以下问题:
- 在单实例配置中,可以使用宽卡查找电话号码,例如使用KEY方法,但这在分片配置中不可用。如何查找第一部分已知的密钥?
- 用户 ID 是从一个 zset 生成的,它的用户 ID 得分增加。这可以在单实例配置的事务中完成,但即使参与的密钥在同一个实例上,jedis 上的分片配置似乎也不支持事务。如果多个客户端线程也可以创建用户,如何解决这个问题?
也提前感谢您的回复。