Jedis
依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>
测试连接
public class TestPing {public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1", 6379);System.out.println(jedis.ping());}}
测试事务
public class TestTransactions {public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1", 6379);JSONObject js = new JSONObject();js.put("name", "Tom");js.put("age", 5);String user = js.toJSONString();Transaction multi = jedis.multi();try {multi.set("user1", user);multi.set("user2", user);multi.exec();} catch (Exception e) {multi.discard();e.printStackTrace();} finally {System.out.println(jedis.get("user2"));jedis.close();}}}
SpringBoot+Redis
在SpringBoot2.x之后,jedis被替换为lettuce,jedis采用直连,多线程不安全,使用jedis pool连接池,类似BIO模式,lettuce采用netty,实例可以在多个线程中进行共享,不存在线程安全问题,可以减少线程数据,类似NIO模式。
依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
源码
// @ConditionalOnMissingBean可以自定义@Bean@ConditionalOnMissingBean(name = {"redisTemplate"})public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBeanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
测试
Java中使用哨兵模式
public class TestSentinels {@SuppressWarnings("resource")@Testpublic void testSentinel() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxTotal(10);jedisPoolConfig.setMaxIdle(5);jedisPoolConfig.setMinIdle(5);// 哨兵信息Set<String> sentinels = new HashSet<>(Arrays.asList("192.168.11.128:26379","192.168.11.129:26379","192.168.11.130:26379"));// 创建连接池JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels,jedisPoolConfig,"123456");// 获取客户端Jedis jedis = pool.getResource();// 执行两个命令jedis.set("mykey", "myvalue");String value = jedis.get("mykey");System.out.println(value);}}
上面是通过Jedis进行使用的,同样也可以使用Spring进行配置RedisTemplate使用。
<bean id = "poolConfig" class="redis.clients.jedis.JedisPoolConfig"><!-- 最大空闲数 --><property name="maxIdle" value="50"></property><!-- 最大连接数 --><property name="maxTotal" value="100"></property><!-- 最大等待时间 --><property name="maxWaitMillis" value="20000"></property></bean><bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg><constructor-arg name="sentinelConfig" ref="sentinelConfig"></constructor-arg><property name="password" value="123456"></property></bean><!-- JDK序列化器 --><bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean><!-- String序列化器 --><bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="connectionFactory"></property><property name="keySerializer" ref="stringRedisSerializer"></property><property name="defaultSerializer" ref="stringRedisSerializer"></property><property name="valueSerializer" ref="jdkSerializationRedisSerializer"></property></bean><!-- 哨兵配置 --><bean id="sentinelConfig" class="org.springframework.data.redis.connection.RedisSentinelConfiguration"><!-- 服务名称 --><property name="master"><bean class="org.springframework.data.redis.connection.RedisNode"><property name="name" value="mymaster"></property></bean></property><!-- 哨兵服务IP和端口 --><property name="sentinels"><set><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="192.168.11.128"></constructor-arg><constructor-arg name="port" value="26379"></constructor-arg></bean><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="192.168.11.129"></constructor-arg><constructor-arg name="port" value="26379"></constructor-arg></bean><bean class="org.springframework.data.redis.connection.RedisNode"><constructor-arg name="host" value="192.168.11.130"></constructor-arg><constructor-arg name="port" value="26379"></constructor-arg></bean></set></property></bean>
