1 前言

Redis Standalone,Redis Cluster的安装在前面介绍过,地址:http://www.cnblogs.com/liuchangchun/p/5063477.html,这里不做介绍。

2 Redis的使用

针对各种编程语言,差不多都有Redis的驱动程序。针对Scala程序,在github上面有几个可用驱动:

scala-redis:https://github.com/liuchchc/scala-redis

rediscala:https://github.com/etaty/rediscala

jedis:https://github.com/liuchchc/jedis

我用的是jedis,感觉还是蛮好用的,支持Cluster

2.1 JedisSentinelPool方式

Standalone模式中,Cluster提供了哨兵用于监视Redis Server的运行状态,并选举出Master,这个模式中需要配置sentinel.conf,在这种模式下Jedis中如下使用

  val sentinelClusterName = "mymaster"

  val sentinelServerHostHS = new HashSet[String]
sentinelServerHostHS.add("192.168.1.103:26379")
sentinelServerHostHS.add("192.168.1.104:26379")
sentinelServerHostHS.add("192.168.1.105:26379")
sentinelServerHostHS.add("192.168.1.106:26379")
sentinelServerHostHS.add("192.168.1.107:26379")
sentinelServerHostHS.add("192.168.1.108:26379") // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽),默认值是8。
val MAX_ACTIVE = -1;
// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
val MAX_IDLE = -1;
// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
val MAX_WAIT = -1;
// 超时时间,0永不超时
val TIMEOUT = 0; var poolConfig = new GenericObjectPoolConfig
poolConfig.setMaxTotal(MAX_ACTIVE)
poolConfig.setMaxIdle(MAX_IDLE)
poolConfig.setMaxWaitMillis(MAX_WAIT)
poolConfig.setTestOnBorrow(true)
poolConfig.setTestOnReturn(true) def getPoolConfig: GenericObjectPoolConfig = poolConfig
lazy val jedisSentinelPool = new JedisSentinelPool("mymaster", sentinelServerHostHS, poolConfig, TIMEOUT)
lazy val sentinelConnection = jedisShardedPool.getResource
// Redis 操作……
// Redis 操作完毕
sentinelConnection.close
jedisSentinelPool.destroy

2.2 ShardedJedisPool方式

  val shardsServerHostList = new ArrayList[JedisShardInfo]
val si1 = new JedisShardInfo("192.168.1.103", 6379)
val si2 = new JedisShardInfo("192.168.1.104", 6379)
val si3 = new JedisShardInfo("192.168.1.105", 6379)
val si4 = new JedisShardInfo("192.168.1.106", 6379)
val si5 = new JedisShardInfo("192.168.1.107", 6379)
val si6 = new JedisShardInfo("192.168.1.108", 6379) shardsServerHostList.add(si1)
shardsServerHostList.add(si2)
shardsServerHostList.add(si3)
shardsServerHostList.add(si4)
shardsServerHostList.add(si5)
shardsServerHostList.add(si6)
lazy val jedisShardedPool = new ShardedJedisPool(poolConfig, shardsServerHostList)
lazy val shardedConnection = jedisShardedPool.getResource
  // Redis 操作……
  // Redis 操作完毕
  shardedConnection.close
  jedisShardedPool.destroy

2.3 JedisCluster方式

在Redis Cluster模式中,我这里面是3 master,6 slave,HostAndPort只需要传1个,Redis会自己检测整个集群中有哪些Master和Slave。至于在添加数据时候数据存储到哪个集群中,用户层面不需要关心,读取数据也一样。

  val jedisClusterNodes = new java.util.HashSet[HostAndPort]()
jedisClusterNodes.add(new HostAndPort("192.168.1.100", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.101", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.103", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.104", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.105", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.107", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.108", 6379))
jedisClusterNodes.add(new HostAndPort("192.168.1.109", 6379))
// Redis 操作
lazy val jedisCluster = new JedisCluster(jedisClusterNodes)

3 使用场景

这里是Spark处理生物数据,因为中间结果比较多,所以加了一台Redis Server存储中间结果,总共1亿多条,3.5G左右,大概在分分钟就能存进去,所以Redis的性能还是杠杠滴,不过要批量写,读,否则也会慢的很。

4 参考文献:

4.1 http://my.oschina.net/zhuguowei/blog/411077

4.2 http://ju.outofmemory.cn/entry/141317

Ubuntu 15.10 下Scala 操作Redis Cluster的更多相关文章

  1. Ubuntu 15.10 下Redis Cluster使用

    1 Redis Standalone安装 可以参考这篇博文:http://www.cnblogs.com/_popc/p/3684835.html 2 Redis Cluster安装 2.1 环境介绍 ...

  2. Ubuntu 15.10 下Tachyon安装

    1 系统环境 Ubuntu 15.10, Java 1.7, Hadoop 2.6.0 HA, Spark-1.4.0 三台机器 spark-1423-0001: Master, Worker spa ...

  3. Ubuntu 15.10下的WebStorm-11.0.3完美破解

    由于最新的JetBrains 发布了最新版本的IntelliJ IDEA的各个版本,而且更换了注册机的使用方式,这就导致了之前对WebStorm的破解方法不能在使用了.所以我们就必须另寻他法咯.如题, ...

  4. Ubuntu 14.10 下Eclipse操作HBase

    环境介绍 64位Ubuntu14.10,Hadoop 2.5.0 ,HBase 0.99.0 准备环境 1 安装Hadoop 2.5.0,可参考http://www.cnblogs.com/liuch ...

  5. Ubuntu 15.10下droidbox安装使用

    DroidBox是一个动态分析Android代码的的分析工具.其目前的安装环境为:Linux/Unix/MacOSX 下面是安装步骤 一. 安装Android SDK 并添加环境变量 export P ...

  6. Ubuntu 15.10下Qt5的安装实战

    写照篇博客的目的就是因为最近要使用Qt,但是由于本人的系统是Ubuntu的,而网上大部分的讲解全是基于Windows的,所以就花费一些时间总结了一下我的安装过程,当然也是也为了能帮助到更多的博友. 第 ...

  7. 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX

    https://www.v2ex.com/t/279405 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX pip 更新到最新 sudo apt inst ...

  8. ubuntu 15.10 64bit 下 steam无法启动

    首先查看steam日志,在/tmp/dumps/下,以“用户名_output.txt”命名. $ cat /tmp/dumps/liuxu_output.txt Running Steam on ub ...

  9. Ubuntu 15.10 x64 安装 Android SDK

    操作系统:Ubuntu 15.10 x64 目标:安装 Android SDK 本文最后更新时间:2015-11-3 安装32位库文件 2013年9月的iPhone 5s是第一款64位手机,而Andr ...

随机推荐

  1. FCC JS基础算法题(5):Return Largest Numbers in Arrays(找出多个数组中的最大数)

    题目描述: 找出多个数组中的最大数右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组.提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组 ...

  2. python学习第三次记录

    python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...

  3. Map、Set、List区别

    转:https://www.cnblogs.com/jing99/p/6947549.html 提到集合之前,先说说数组Array和集合的区别:   (1)数组是大小固定的,并且同一个数组只能存放类型 ...

  4. web端分享网页到各个网站JS代码(微信为生成二维码)

    /*分享到新浪微博,QQ空间,人人网,生成二维码*/ var myTitle=$("title").text(); var myHref = window.location.hre ...

  5. 用chrome和anywhere,配合安卓机搭建最简单的移动端页面测试。

    很多时候,我们前端在写移动端页面的时候,虽然目前chrome有调试模式,可以模拟手机的部分效果,但仍有部分效果需要直接在手机上进行页面的调试,今天就在这里推荐一个适合windows+安卓的无需连接局域 ...

  6. IOS 生成静态库文件(.framework)

    http://blog.csdn.net/zwl492454828/article/details/55095422

  7. [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针

    1.=================================================================== 1,数组是一块内存连续的数据.2,指针是一个指向内存空间的变 ...

  8. java中数组实现的错误

    作为一个刚学java的小白 真是错误百出 下面就是一个大神会非常不屑的一个小错误 数组在初始化的时候仅仅是定义了一个数组,并未其中的内容初始化. 附上错误代码 : class student{publ ...

  9. HTML5网页制作好好玩啊

    ---恢复内容开始--- 这两天在看HTML5,由于学习的需要,所以要学的,嗯,这个整人还是很有意思的(但是超超是好人,从不干坏事) 现在请欣赏一下我的代码和图片吧!(想整人的小伙伴可以自己copy来 ...

  10. 洛古 P2568 莫比乌斯+暴力

    #include<bits/stdc++.h> #define LL long long using namespace std; ; bool vis[maxn]; int prime[ ...