Redis的java客户端
使用方式
配置Redis
导入依赖
<properties><redis>2.7.3</redis>
</properties>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>${redis}</version>
</dependency>
配置属性
- 在application-dev.yml配置具体的参数
- 在application.yml记性引用
dev文件
sky:datasource:driver-class-name: com.mysql.cj.jdbc.Driverhost: localhostport: 3306database: sky_take_outusername: rootpassword: rootredis:host: localhostport: 6379# 密码 默认没有密码# password: root# 数据库索引 0-15database: 0timeout: 10000
application.yml文件
spring:profiles:active: devmain:allow-circular-references: truedatasource:druid:driver-class-name: ${sky.datasource.driver-class-name}url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: ${sky.datasource.username}password: ${sky.datasource.password}redis:host: ${sky.redis.host}port: ${sky.redis.port}# 密码 默认没有密码# password: ${sky.redis.password}# 数据库索引 0-15database: ${sky.redis.database}timeout: ${sky.redis.timeout}
编写配置类
RedisConfiguration类
/*** Redis配置*/
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate redisTemplate = new RedisTemplate();// 设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置序列化器 用于序列化key 防止key乱码redisTemplate.setKeySerializer(redisTemplate.getStringSerializer());log.info("RedisTemplate加载完成");return redisTemplate;}
}
测试
@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*** 字符串类型测试*/@Testpublic void test() {ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name", "小猫");String name = (String) valueOperations.get("name");System.out.println(name);// 设置过期时间valueOperations.set("age", "18");// 设置过期时间 10秒redisTemplate.expire("age", 10, java.util.concurrent.TimeUnit.SECONDS);// 获取过期时间Long expire = redisTemplate.getExpire("age");System.out.println(expire);// 如果key存在则不设置,否则设置Boolean absent = valueOperations.setIfAbsent("age", "20");System.out.println(absent);}}
字符串操作
/*** 字符串类型测试*/@Testpublic void test() {ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name", "小猫");String name = (String) valueOperations.get("name");System.out.println(name);// 设置过期时间valueOperations.set("age", "18");// 设置过期时间 10秒redisTemplate.expire("age", 10, java.util.concurrent.TimeUnit.SECONDS);// 获取过期时间Long expire = redisTemplate.getExpire("age");System.out.println(expire);// 如果key存在则不设置,否则设置Boolean absent = valueOperations.setIfAbsent("age", "20");System.out.println(absent);}
操作哈希
/*** 哈希类型测试*/@Testpublic void testHash(){HashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("user", "name", "小猫");hashOperations.put("user", "age", "18");String name = (String) hashOperations.get("user", "name");String age = (String) hashOperations.get("user", "age");System.out.println(name);System.out.println(age);// 获取所有的keyhashOperations.keys("user").forEach(System.out::println);// 删除属性namehashOperations.delete("user", "name");// 删除整个hashredisTemplate.delete("user");}
操作列表
/*** 列表类型测试*/@Testpublic void testList(){ListOperations listOperations = redisTemplate.opsForList();// 从左边插入listOperations.leftPush("list", "a");listOperations.leftPush("list", "b");listOperations.leftPush("list", "c");// 从左边弹出String value = (String) listOperations.leftPop("list");System.out.println(value);// 从右边插入listOperations.rightPush("list", "d");listOperations.rightPush("list", "e");listOperations.rightPush("list", "f");// 从右边弹出value = (String) listOperations.rightPop("list");System.out.println(value);// 获取指定范围的元素listOperations.range("list", 0, -1).forEach(System.out::println);// 删除元素 1表示删除一个元素listOperations.remove("list", 1, "d");}
操作集合
/*** 集合类型测试*/@Testpublic void testSet(){SetOperations setOperations = redisTemplate.opsForSet();// 添加元素setOperations.add("set", "a", "b", "c", "d", "e");// 添加重复元素 无效setOperations.add("set", "a", "b", "c", "d", "e");// 获取元素 无序setOperations.members("set").forEach(System.out::println);}
操作zset
/*** 有序集合类型测试*/@Testpublic void testZSet(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();// 添加元素zSetOperations.add("zset", "a", 1);zSetOperations.add("zset", "b", 2);zSetOperations.add("zset", "c", 99);zSetOperations.add("zset", "d", 4);// 获取元素 有序 从小到大System.out.println("获取元素");zSetOperations.range("zset", 0, -1).forEach(System.out::println);// 获取指定分数范围的元素System.out.println("获取指定分数范围的元素");zSetOperations.rangeByScore("zset", 1, 3).forEach(System.out::println);// 获取元素和分数System.out.println("获取元素和分数");zSetOperations.rangeWithScores("zset", 0, -1).forEach(System.out::println);}