非集群状态下用Jedis获取Redis连接,得到Jedis对象即可,一共有两种:
1.利用Jedis构造器,仅限用于测试,在实际项目中肯定是用JedisPool。
Jedis(String host)
Jedis(String host , int port)
2.利用JedisPool
主要是利用Jedis jedis=jedisPool.getResource()
JedisPool有N多个构造器,常用的构造器参数有GenericObjectPoolConfig poolConfig,String host,int port,int timeout,String password,创建GenericObjectPoolConfig对象时我们一般用其子类JedisPoolConfig (redis.clients.jedis.JedisPoolConfig),timeout是连接redis服务器的超时时间,以毫秒为单位,一般设置为0,如果不设为0,则不可设置太小,如果设成1、2,缺毕那么可能因为网络原因在1毫秒、2毫秒之内没有连上服务器而报错。见下例:
[java] view plain copy
public static void main(String[] args) {
JedisPoolConfig poolConfig = new JedisPoolConfig()
// 最大连接数
poolConfig.setMaxTotal(2)
// 最大空闲数
poolConfig.setMaxIdle(2)
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000)
JedisPool pool = new JedisPool(poolConfig, "192.168.83.128", 6379, 0, "123")
Jedis jedis = null
try {
for (int i = 0i <5i++) {
jedis = pool.getResource()
jedis.set("宴渣foo" + i, "bar" + i)
System.out.println("第" + (i + 1) + "个连接, 得到的值为" + jedis.get("foo" + i))
// 用完一定要释放连接
jedis.close()
}
} finally {
pool.close()
}
}
如上,创建出一个JedisPool对象,然后调用其getResource()方法获取redis连接即可,之后就可以调用Jedis API *** 作redis了。jedis连接用完要释放即close,如果不close,则产生的连接会越来越多,当达到了最大连接数,再想获得连接,就会等待,当超过了最大等待时间后就会报异常。
第二:集群状态下
集群状态下用Jedis获取redis连接,是得到JedisCluster对象,之后对redis进行 *** 作都是用此对象的方法进行的:
[java] view plain copy
public static void main(String[] args) {
JedisPoolConfig poolConfig = new JedisPoolConfig()
// 最大连接数
poolConfig.setMaxTotal(1)
// 最大空闲数
poolConfig.setMaxIdle(1)
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000)
Set<HostAndPort>nodes = new LinkedHashSet<HostAndPort>()
nodes.add(new HostAndPort("192.168.83.128", 6379))
nodes.add(new HostAndPort("192.168.83.128", 6380))
nodes.add(new HostAndPort("192.168.83.128", 6381))
nodes.add(new HostAndPort("192.168.83.128", 6382))
nodes.add(new HostAndPort("192.168.83.128", 6383))
nodes.add(new HostAndPort("192.168.83.128", 6384))
JedisCluster cluster = new JedisCluster(nodes, poolConfig)
String name = cluster.get("name")
System.out.println(name)
cluster.set("age", "18")
System.out.println(cluster.get("age"))
try {
cluster.close()
} catch (IOException e) {
e.printStackTrace()
}
}
用集群时,好像没有办法设置集群的参数,比如最大连接数,虽然在创建JedisCluster 对象时传了JedisPoolConfig对象进去,但是JedisPoolConfig对象中的设置是不生效的。
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层.客户瞎困端不需要连接集群所有节点,连接集群中任何一个可用节洞物点即可。
4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将磨颤念一个key放到哪个桶中。
公司里面项目基本都早败谨使用哨兵模式
注意事项:
1 引入pom依赖
2 添加redis哨兵配置,database主动设置,才会生效
3 application.yml配置枯物
4 项目目录
5 启动测试连接
可以看到redis.clients.jedis.JedisSentinelPool: Created JedisSentinelPool to master at 10.10.195.249:6379已经启动了
作为程序员第陆基 140 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha ...
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)