一 SpringBoot整合
SpringBoot官方有对Redis的支持。在1.x的时候,SpringBoot底层使用Jedis连接Redis,在2.x之后,改为Lettuce,因为Jedis采用的是直连的方式,有多个线程操作的话,会有线程不安全问题,想要避免,需要使用jedis pool。Lettuce采用netty,实例可以在多个线程中进行共享,不存在线程安全问题,可以减少线程数据,更像NIO的方式
- maven依赖
```xml
org.springframework.boot spring-boot-starter-data-redis
<a name="ZamBK"></a>## 1.1 初始配置- properties配置```markdown# hostspring.redis.host=127.0.0.1# 端口spring.redis.port=6379# 数据库,默认为0spring.redis.database=0# 设置连接超时spring.redis.timeout=18000000# 连接池的最大连接数,负数表示没有限制spring.redis.lettuce.pool.max-active=8# 最大阻塞等待时间,负数表示没有限制spring.redis.lettuce.pool.max-wait=-1# 连接池中最大的空闲连接数spring.redis.lettuce.pool.max-idle=5# 连接池中最小的空闲连接处spring.redis.lettuce.pool.min-idle=0
- 配置类
在Reidis配置类中,设置存储对象时,进行序列化的配置。使用Jackson工具类进行序列化配置
@Configurationpublic class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 序列化方式StringRedisSerializer redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setKeySerializer(redisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);return redisTemplate;}}
1.1 官方RedisTemplate
SpringBoot早已帮我们注册了Redis的操作对象:RestTemplate,直接从IOC取出使用即可
@Servicepublic class TestService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public void test1() {ValueOperations<String, String> ops = redisTemplate.opsForValue();ops.set("name", "lz");}public void test2() {System.out.println(redisTemplate.opsForValue().get("name"));}}
可以通过 RestTemplate获取操作不同数据类型的对象,其方法大概和Redis命令差不多
- opsForValue():操作String
- opsForHash():操作Hash
- opsForList():操作List
- opsForSet():操作Set
- opsForZSet() :操作Zset
- opsForGeo():操作Geo
- opsForHyperLogLog():操作HyperLogLog
- opsForStream():操作Stream
1.2 保存一个对象
二 Jedis
Jedis是java中常见的操作客户端,支持redis的各种命令操作
2.1 Jedis常见操作
1)创建对象
public Jedis newJedis() {String host = "127.0.0.1";int port = 6379;// 创建对象return new Jedis(host, port);}
2)获取当前库所有的key
@Testpublic void test1() {Jedis jedis = newJedis();Set<String> keys = jedis.keys("*");System.out.println(keys);}
3)常见操作
和命令行一样,方法名也是:set(),get() 等
@Testpublic void test2() {Jedis jedis = newJedis();// set,getjedis.set("name", "lz");jedis.set("age", "19");System.out.println(jedis.get("name"));System.out.println(jedis.get("age"));// hset, hgetjedis.hset("person", "name", "lz");jedis.hset("person", "age", "19");System.out.println(jedis.hget("person", "name"));// list操作jedis.lpush("list_key_1", "lucy", "tom", "jack");List<String> list_key_1 = jedis.lrange("list_key_1", 0, -1);System.out.println(list_key_1);jedis.del("list_key_1");// set操作jedis.sadd("set_key_1", "kk", "ll", "kk");Set<String> set_key_1 = jedis.smembers("set_key_1");System.out.println(set_key_1);jedis.del("set_key_1");// zset操作jedis.zadd("zset_key_1", 10d, "shanghai");jedis.zadd("zset_key_1", 20d, "beijing");jedis.zadd("zset_key_1", 5d, "guangzhou");Set<String> zset_key_1 = jedis.zrange("zset_key_1", 0, -1);System.out.println(zset_key_1);}
