前置工作:
启动redis,打开可视化工具
1、导入spring Data Redis的maven坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2、配置redis数据源
application-dev.yml文件
sky: redis: host: localhost #地址 port: 6379 #端口号 password: 123456 #密码 database: 0 #0号数据库
application.yml文件
spring: redis: host: ${sky.redis.host} #地址 port: ${sky.redis.port} #端口号 password: ${sky.redis.password} #密码 database: ${sky.redis.database} #0号数据库
3、编写配置类,创建RedisTemplate对象
package com.sky.config; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @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; } }
4、通过RedisTemplate对象操作Redis
package com.sky; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.core.*; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; @SpringBootTest public class SpringDataRedisTest { @Autowired RedisTemplate redisTemplate; /*操作字符串类型数据*/ @Test void testString(){ //set get setex setnx redisTemplate.opsForValue().set("city","北京"); String city = (String) redisTemplate.opsForValue().get("city"); redisTemplate.opsForValue().set("code","123",3, TimeUnit.MINUTES); redisTemplate.opsForValue().setIfAbsent("lock","1"); //redisTemplate.opsForValue().setIfAbsent("lock","2"); } /*操作哈希类型数据*/ @Test void testHash(){ //hset hget hdel hkeys hvals HashOperations hashOperations = redisTemplate.opsForHash(); /*存储*/ hashOperations.put("001","name","tom"); hashOperations.put("001","age","20"); /*获取*/ String name = (String) hashOperations.get("001", "name"); Set keys = hashOperations.keys("001"); System.out.println(keys); List values = hashOperations.values("001"); System.out.println(values); /*删除*/ // hashOperations.delete("001","age"); } /*操作list类型数据*/ @Test void testList(){ //lpush lrange rpop llen ListOperations listOperations = redisTemplate.opsForList(); /*添加*/ listOperations.leftPushAll("list","a","b","c"); listOperations.leftPush("list","d"); /*获取*/ List list = listOperations.range("list",0,-1); System.out.println(list); //移除左边第一个元素 listOperations.rightPop("list"); //移除右边第一个元素 listOperations.leftPop("list"); Long size = listOperations.size("list"); System.out.println(size); } /** * 操作集合类型的数据 */ @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); /*元素分数增加,delta是增量*/ Double aDouble = zSetOperations.incrementScore("zset1", "c", 10); System.out.println(aDouble); /*删除*/ zSetOperations.remove("zset1","a","b"); } /** * 通用命令操作 */ @Test public void testCommon(){ //keys exists type del /*查询所有存储*/ Set keys = redisTemplate.keys("*"); System.out.println(keys); /*查询key是否存在,返回布尔类型的值*/ Boolean name = redisTemplate.hasKey("name"); System.out.println(name); Boolean set1 = redisTemplate.hasKey("set1"); System.out.println(name); /*遍历所有的key,查看类型*/ for (Object key : keys) { DataType type = redisTemplate.type(key); System.out.println(type.name()); } redisTemplate.delete("mylist"); } }