Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。java
Redis 与其余 key - value 缓存产品有如下三个特色:
Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重启的时候能够再次加载进行使用。
Redis不单单支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。node
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操做。
原子 – Redis的全部操做都是原子性的,同时Redis还支持对几个操做全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过时等等特性。git
Redis有着更为复杂的数据结构而且提供对他们的原子性操做,这是一个不一样于其余数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中可是能够持久化到磁盘,因此在对不一样数据集进行高速读写时须要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另外一个优势是, 相比在磁盘上相同的复杂的数据结构,在内存中操做起来很是简单,这样Redis能够作不少内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,由于他们并不须要进行随机访问。程序员
任选其一github
CentOs7.3 搭建 Redis-4.0.1 单机服务redis
CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务数据库
代码我已放到 Github ,导入 ymq-redis 项目 segmentfault
github https://github.com/souyunku/ymq-example/tree/master/ymq-redis缓存
在项目中添加 jedis
依赖数据结构
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
private static JedisCluster jedisCluster = null; static { JedisPoolConfig config = new JedisPoolConfig(); //最大链接数, 默认8个 config.setMaxTotal(1000); //大空闲链接数, 默认8个 config.setMaxIdle(10); //获取链接时的最大等待毫秒数(若是设置为阻塞时BlockWhenExhausted),若是超时就抛异常, 小于零:阻塞不肯定的时间, 默认-1 config.setMaxWaitMillis(3000); //--------如下配置默认就能够----------- //最小空闲链接数, 默认0 config.setMinIdle(0); //是否启用pool的jmx管理功能, 默认true config.setJmxEnabled(true); //是否启用后进先出, 默认true config.setLifo(true); //在获取链接的时候检查有效性, 默认false config.setTestOnBorrow(false); //在空闲时检查有效性, 默认false config.setTestWhileIdle(false); Set<HostAndPort> hps = new HashSet<HostAndPort>(); String redisClusterIp = "10.4.89.161:6379"; String[] ip = redisClusterIp.split(":"); int port = Integer.valueOf(ip[1]); hps.add(new HostAndPort(ip[0], port)); jedisCluster = new JedisCluster(hps, config); LOG.info("JedisPoolConfig:{}", JSONObject.toJSONString(config)); Map<String, JedisPool> nodes = jedisCluster.getClusterNodes(); LOG.info("Get the redis thread pool:{}", nodes.toString()); }
private static Jedis jedis = null; static { JedisPoolConfig config = new JedisPoolConfig(); //最大链接数, 默认8个 config.setMaxTotal(1000); //大空闲链接数, 默认8个 config.setMaxIdle(10); //获取链接时的最大等待毫秒数(若是设置为阻塞时BlockWhenExhausted),若是超时就抛异常, 小于零:阻塞不肯定的时间, 默认-1 config.setMaxWaitMillis(3000); //--------如下配置默认就能够----------- //最小空闲链接数, 默认0 config.setMinIdle(0); //是否启用pool的jmx管理功能, 默认true config.setJmxEnabled(true); //是否启用后进先出, 默认true config.setLifo(true); //在获取链接的时候检查有效性, 默认false config.setTestOnBorrow(false); //在空闲时检查有效性, 默认false config.setTestWhileIdle(false); JedisPool pool = new JedisPool(config, "127.0.0.1", 6379); LOG.info("JedisPoolConfig:{}", JSONObject.toJSONString(config)); jedis = pool.getResource(); }
请查看源码
代码我已放到 Github ,导入 ymq-redis 项目
github https://github.com/souyunku/ymq-example/tree/master/ymq-redis
package io.ymq.redis.jedis.utils.CacheUtils;
/** * java JedisCluster 操做 redis 集群 */ @Test public void clusterTest() { JedisClusterUtils.saveString("cluster-key", "www.ymq.io"); System.out.println(JedisClusterUtils.getString("cluster-key")); } /** * java Jedis 操做 redis 单实例 */ @Test public void sentineTest() { JedisSentinelUtils.saveString("sentine-key", "www.ymq.io"); System.out.println(JedisSentinelUtils.getString("sentine-key")); } /** * cacheUtils 操做 redis 集群 */ @Test public void cacheUtilsTest() { CacheUtils.saveString("cluster-key", "www.ymq.io"); System.out.println(CacheUtils.getString("cluster-key")); }