欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 在java中操作Redis

在java中操作Redis

2024/10/28 8:12:37 来源:https://blog.csdn.net/qq_40603125/article/details/142637854  浏览:    关键词:在java中操作Redis

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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com