阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis实现键对应多值

113次阅读
没有评论

共计 2301 个字符,预计需要花费 6 分钟才能阅读完成。

Redis 服务器提供了很多流行的数据结构,比如 Map、List、Set……

而在项目开发中,可能会遇到更复杂的需求,需要更复杂的数据结构,比如一个键对应存储多个值,要实现这样的需求,最好的办法就是实现 Multimap 数据结构。

首先需要自己构建这样的数据结构,如下:

Map<MyKey, Set<MyObject>> setMultimap = new HashMap<>();
void put(MyKey key, MyObject obj) {Set<MyObject> list = setMultimap.get(key);
   if (set == null) {set = new HashSet<>();
       setMultimap.put(key, obj);
   }
   set.add(obj);
}

void remove(MyObject obj) {set<MyObject> set = setMultimap.get(key);
   if (set != null) {set.remove(obj);
   }
}

要使得 Redis 支持此数据结构,还需做很多工作:创建 Redis 连接、执行 Redis 命令、在 Redis 的 map 键和 Redis 的 list 值之间建立单向关系等。

如果 Redis 的 Java 客户端驱动使用 Redisson 框架(不使用 Jedis),那么实现以上工作非常简单。Redisson 可以帮助开发者完成这些繁琐的工作,Redisson 实现了标准的 Java 对象集合,包括:Map、List、Set、Lock…,还提供了 Multimap 对象。
http://redisson.org/

Redisson 框架提供了两种 Multimap 对象:

  • RListMultimap:基于 List 的 Multimap,键绑定的值存储于 List 结构中。
  • RSetMultimap:基于 Set 的 Multimap,键绑定的值存储于 Set 结构中。

下面看看使用 RSetMultimap 的例子:

Config config = new Config();
config.useClusterServers()
    // redis cluster nodes
    .addNodeAddress("127.0.0.1:7000", "127.0.0.1:7001");
RedissonClient redisson = Redisson.create(config);
RSetMultimap<String, String> setMultimap = redisson.getSetMultimap("myFish");
// Adding items
setMultimap.put("favoriteFish", "Flagfin");
setMultimap.put("favoriteFish", "Shiner");
setMultimap.put("favoriteFish", "Ladyfish");
setMultimap.put("oceanFish", "Shark");
setMultimap.put("oceanFish", "Ocean sunfish");
// Removing item
setMultimap.remove("oceanFish", "Shark");
setMultimap.remove("favoriteFish", "Flagfin");
// Getting all items
Set<String> favoriteFish = setMultimap.get("favoriteFish");
// Getting size
// total entries amount
setMultimap.size(); // 5
// total values amount by key
setMultimap.get("favoriteFish").size(); // 3
// check entry existence
setMultimap.containsEntry("favoriteFish", "Ladyfish");
// and so on ...

值得注意的是,Redisson 对象类型可以是任意类型,不局限于字符串。

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis 安装部署学习笔记 http://www.linuxidc.com/Linux/2014-07/104306.htm

Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136420.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2301字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中