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.Driver
host: localhost
port: 3306
database: sky_take_out
username: root
password: root
redis:
host: localhost
port: 6379
# 密码 默认没有密码
# password: root
# 数据库索引 0-15
database: 0
timeout: 10000
application.yml文件
spring:
profiles:
active: dev
main:
allow-circular-references: true
datasource:
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=true
username: ${sky.datasource.username}
password: ${sky.datasource.password}
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
# 密码 默认没有密码
# password: ${sky.redis.password}
# 数据库索引 0-15
database: ${sky.redis.database}
timeout: ${sky.redis.timeout}
编写配置类
RedisConfiguration类
/**
* Redis配置
*/
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public 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 {
@Autowired
private RedisTemplate redisTemplate;
/**
* 字符串类型测试
*/
@Test
public 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);
}
}
字符串操作
/**
* 字符串类型测试
*/
@Test
public 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);
}
操作哈希
/**
* 哈希类型测试
*/
@Test
public 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);
// 获取所有的key
hashOperations.keys("user").forEach(System.out::println);
// 删除属性name
hashOperations.delete("user", "name");
// 删除整个hash
redisTemplate.delete("user");
}
操作列表
/**
* 列表类型测试
*/
@Test
public 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");
}
操作集合
/**
* 集合类型测试
*/
@Test
public 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
/**
* 有序集合类型测试
*/
@Test
public 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);
}