Spring Data Redis使用方式
1,进入到sky-server模块
导入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: 10
复制代码解释说明: database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15,不写默认为0。 可以通过修改Redis配置文件来指定数据库的数量。 在application.yml中添加读取application-dev.yml中的相关Redis配置 - spring:
- profiles:
- active: dev
- redis:
- host: ${sky.redis.host}
- port: ${sky.redis.port}
- password: ${sky.redis.password}
- database: ${sky.redis.database}
复制代码 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;
- }
- }
复制代码解释说明: 当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为 JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为 StringRedisSerializer序列化器。
4). 通过RedisTemplate对象操作Redis
在test下新建测试类
- package com.sky.test;
- 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.core.*;
- @SpringBootTest
- public class SpringDataRedisTest {
- @Autowired
- private RedisTemplate redisTemplate;
- @Test
- public void testRedisTemplate(){
- System.out.println(redisTemplate);
- //string数据操作
- ValueOperations valueOperations = redisTemplate.opsForValue();
- //hash类型的数据操作
- HashOperations hashOperations = redisTemplate.opsForHash();
- //list类型的数据操作
- ListOperations listOperations = redisTemplate.opsForList();
- //set类型数据操作
- SetOperations setOperations = redisTemplate.opsForSet();
- //zset类型数据操作
- ZSetOperations zSetOperations = redisTemplate.opsForZSet();
- }
- }
复制代码
1). 操作字符串类型数据
- /**
- * 操作字符串类型的数据
- */
- @Test
- public void testString(){
- // set get setex setnx
- redisTemplate.opsForValue().set("name","小明");
- String city = (String) redisTemplate.opsForValue().get("name");
- System.out.println(city);
- redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
- redisTemplate.opsForValue().setIfAbsent("lock","1");
- redisTemplate.opsForValue().setIfAbsent("lock","2");
- }
复制代码 2). 操作哈希类型数据
- /**
- * 操作哈希类型的数据
- */
- @Test
- public void testHash(){
- //hset hget hdel hkeys hvals
- HashOperations hashOperations = redisTemplate.opsForHash();
- hashOperations.put("100","name","tom");
- hashOperations.put("100","age","20");
- String name = (String) hashOperations.get("100", "name");
- System.out.println(name);
- Set keys = hashOperations.keys("100");
- System.out.println(keys);
- List values = hashOperations.values("100");
- System.out.println(values);
- hashOperations.delete("100","age");
- }
复制代码 3). 操作列表类型数据
- /**
- * 操作列表类型的数据
- */
- @Test
- public void testList(){
- //lpush lrange rpop llen
- ListOperations listOperations = redisTemplate.opsForList();
- listOperations.leftPushAll("mylist","a","b","c");
- listOperations.leftPush("mylist","d");
- List mylist = listOperations.range("mylist", 0, -1);
- System.out.println(mylist);
- listOperations.rightPop("mylist");
- Long size = listOperations.size("mylist");
- System.out.println(size);
- }
复制代码 4). 操作集合类型数据
- /**
- * 操作集合类型的数据
- */
- @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");
- }
复制代码 5). 操作有序集合类型数据
- /**
- * 操作有序集合类型的数据
- */
- @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");
- }
复制代码 6). 通用命令操作
- /**
- * 通用命令操作
- */
- @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");
- }
复制代码 测试- package com.sky.test;
- 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
- private RedisTemplate redisTemplate;
- @Test
- public void testRedisTemplate(){
- System.out.println(redisTemplate);
- }
- /**
- * 操作字符串类型的数据
- */
- @Test
- public void testString(){
- // set get setex setnx
- redisTemplate.opsForValue().set("name","小明");
- String city = (String) redisTemplate.opsForValue().get("name");
- System.out.println(city);
- redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
- redisTemplate.opsForValue().setIfAbsent("lock","1");
- redisTemplate.opsForValue().setIfAbsent("lock","2");
- }
- }
复制代码
|