使用之前linux放行指定端口或关闭防火墙,设置Redis允许远程访问(bind 0.0.0.0 -::1 && protected no)
1.Java通过Jedis操作Redis
引入Redis依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
使用Jedis操作Redis的步骤:
-
获取连接
//默认ip是localhost Jedis jedis = new Jedis("192.168.1.35",6379);
-
执行操作
//2.1.字符串 jedis.set("username","xiaoming"); String value = jedis.get("username"); System.out.println(value); System.out.println(jedis.type("username")); //2.2.hash jedis.hset("myhash","name","xiaomei"); String hget = jedis.hget("myhash", "name"); System.out.println(hget); System.out.println(jedis.type("myhash")); //2.3.list String[] strings = new String[]{"xiaoxin","xiaoli","xiaoguang"}; jedis.lpush("mylist",strings); List<String> mylist = jedis.lrange("mylist", 0, -1); //获取所有的key Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); }
-
关闭连接
jedis.close();
2.Java通过JedisPool获取Jedis
//创建jedis连接池的配置 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(10);//最多连接个数 config.setMinIdle(5);//最小空闲值 config.setMaxIdle(8);//最大空闲值 config.setTestOnBorrow(true);//在拿到jedis对象时,是否验证该对象可用 config.setMaxWaitMillis(3000);//等待时间 //创建jedis连接池 JedisPool pool = new JedisPool(config,"192.168.1.35",6379); //获取jedis连接对象 Jedis jedis = pool.getResource(); //jedis对象归还到连接池 jedis.close();
作用:提高效率,减少频繁地创建和销毁连接对象。
3.Java连接Redis集群
Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.1.35",7000)); nodes.add(new HostAndPort("192.168.1.35",7001)); nodes.add(new HostAndPort("192.168.1.35",7002)); nodes.add(new HostAndPort("192.168.1.35",7003)); nodes.add(new HostAndPort("192.168.1.35",7004)); nodes.add(new HostAndPort("192.168.1.35",7005)); JedisCluster jedisCluster = new JedisCluster(nodes); jedisCluster.close();
4.SpringBoot整合Redis
Spring Data Redis(SpringBoot项目中提供了对应的Starter,即spring-boot-starter-data-redis)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
RedisTemplate springboot针对jedis的高度封装类,该类可以存储任意类型的数据,但是必须序列化,默认采用的时JDK序列化,但是阅读不方便。我们一般不是jdk的序列化方式
StringRedisTemplate springboot针对jedis的高度封装类,RedisTemplate的子类,该类存储的元素值,都是String类型,不能直接存储对象类型;如果想存储对象,则需要把对象进行序列化存储,获取时需要反序列化
#redis相关配置 spring.redis.port=6379 spring.redis.host=192.168.1.35 spring.redis.database=0 spring.redis.lettuce.pool.max-active=10 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.max-idle=10 spring.redis.lettuce.pool.min-idle=0
RedisTemplate和StringRedisTemplate会把对每一种数据的操作封装成一个类
-
ValueOperations: 简单K-V操作
-
SetOperations: set类型数据操作
-
ZSetOperations: zset类型数据操作
-
HashOperations: 针对map类型的数据操作
-
ListOperations: 针对list类型数据操作
@Autowired private StringRedisTemplate stringRedisTemplate; @Test public void testS() throws JsonProcessingException { ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue(); //可以通过序列化把对象转换为相应的json字符串 ObjectMapper objectMapper = new ObjectMapper(); valueOperations.set("sasd",objectMapper.writeValueAsString(new Object())); String s = valueOperations.get("sasd"); //反序列化 Object o = objectMapper.readValue(s, Object.class); }
redisTemplate 配置序列化:
/** * Redis配置类 */ public class RedisConfig { @Bean //该方法的返回对象交于spring容器管理 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setConnectionFactory(factory); //key序列化方式 template.setKeySerializer(redisSerializer); //value序列化 template.setValueSerializer(jackson2JsonRedisSerializer); //key hashmap序列化 template.setHashKeySerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; } } //解决redis-cli.exe中key序列化问题
5.SpringBoot整合Redis集群
spring.redis.jedis.pool.max-active=10 spring.redis.lettuce.pool.max-idle=10 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.min-idle=0 #设置redis重定向的次数---根据主节点的个数 spring.redis.cluster.max-redirects=3 spring.redis.cluster.nodes=192.168.1.35:7000,192.168.1.35:7001,192.168.1.35:7002,192.168.1.35:7003,192.168.1.35:7004,192.168.1.35:7005