1. Redis的Java客户端
Redis 的 Java 客户端常用的几种:
- Jedis
- Lettuce
- Spring Data Redis
Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。 在 Spring 项目中,可以使用Spring Data Redis来简化操作。
2. Spring Data Redis使用方式
操作步骤:
- 在pom.xml文件中导入Spring Data Redis 的maven坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 在application.yml文件中配置Redis数据源
spring: redis: host: localhost port: 6379 password: 123456 database: 0 //0号数据库,可自行指定
- 编写config配置类,创建RedisTemplate对象
@Configuration @Slf4j public class RedisConfiguration { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ log.info("开始创建redis模板对象"); RedisTemplate redisTemplate = new RedisTemplate(); //设置redis的连接工厂对象 redisTemplate.setConnectionFactory(redisConnectionFactory); //设置redis key的序列化器 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } }
- 通过RedisTemplate对象操作Redis
@SpringBootTest public class SpringDataRedisTest { @Autowired private RedisTemplate redisTemplate; /* * 创建五种数据类型的对象 * */ @Test public void testRedisTemplate() { ValueOperations valueOperations = redisTemplate.opsForValue(); HashOperations hashOperations = redisTemplate.opsForHash(); ListOperations listOperations = redisTemplate.opsForList(); SetOperations setOperations = redisTemplate.opsForSet(); ZSetOperations zSetOperations = redisTemplate.opsForZSet(); } /* * 操作字符串类型的数据 * */ @Test public void testString() { //set get setex setnx redisTemplate.opsForValue().set("name", "张三"); //set String name = (String) redisTemplate.opsForValue().get("name"); //get System.out.println(name); redisTemplate.opsForValue().set("code", "456231", 60, TimeUnit.SECONDS); //setex redisTemplate.opsForValue().setIfAbsent("lock", "1");//setnex redisTemplate.opsForValue().setIfAbsent("lock", "2");//setnex } /* * 操作哈希类型的数据 * */ @Test public void testHash() { //hset hget hdel hkeys hvals HashOperations hashOperations = redisTemplate.opsForHash(); hashOperations.put("111", "name", "李四");//hset hashOperations.put("111", "age", "18"); hashOperations.put("111", "sex", "男"); String name = (String) hashOperations.get("111", "name");//hget System.out.println(name); Set keys = hashOperations.keys("111");//hkeys System.out.println(keys); List values = hashOperations.values("111");//hvals System.out.println(values); hashOperations.delete("111", "sex");//hdel } /* * 操作集合类型的数据 * */ @Test public void testSet() { // sadd smembers scard sinter sunion srem SetOperations setOperations = redisTemplate.opsForSet(); setOperations.add("set1", "a", "b", "c", "d"); setOperations.add("set2", "a", "b", "x", "y"); Set members = setOperations.members("set1"); System.out.println(members); Long size = setOperations.size("set1"); System.out.println(size); Set intersect = setOperations.intersect("set1", "set2"); System.out.println(intersect); Set union = setOperations.union("set1", "set2"); System.out.println(union); setOperations.remove("set1", "a", "b"); } /* * 操作有序集合类型的数据 * */ @Test public void testZset() { //zadd zrange zincrby zrem ZSetOperations zSetOperations = redisTemplate.opsForZSet(); zSetOperations.add("zset1", "a", 10); zSetOperations.add("zset1", "b", 12); zSetOperations.add("zset1", "c", 9); Set zset1 = zSetOperations.range("zset1", 0, -1); System.out.println(zset1); zSetOperations.incrementScore("zset1", "c", 10); zSetOperations.remove("zset1", "a", "b"); } /* * 通用命令操作 * */ @Test public void testCommon() { // keys exists type deL Set keys = redisTemplate.keys("*"); System.out.println(keys); Boolean name = redisTemplate.hasKey("name"); Boolean set1 = redisTemplate.hasKey("set1"); for (Object key : keys) { DataType type = redisTemplate.type(key); System.out.println(type.name()); } redisTemplate.delete("mylist"); } }