Spring Boot集成Redis

目录

  • 1.Redis简介
  • 2.添加依赖
  • 3.项目配置
  • 4.使用Redis
    • StringTest
    • SetTest
    • ListTest
    • HashTest
    • ZSetTest
  • 5.测试结果

1.Redis简介

Redis是一款基于内存的使用 K-V 结构存取数据的 NoSQL 非关系型数据库。

Redis的主要作用就是缓存数据,通常,会将关系型数据库(例如MySQL等)中的数据读取出来,写入到Redis中,后续,当需要获取数据时,将优先从Redis中读取,而不是从关系型数据库中读取。

由于Redis是基于内存的,读写效率远高于关系型数据库,进而可以提高查询效率,并且,可以起到“保护”关系型数据库的作用

redis常用命令可参考:redis常用命令汇总

2.添加依赖

pom.xml 中添加redis注解


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
dependency>

3.项目配置

application.properties 中配置redis

# Redis服务器地址
spring.redis.host=10.1.30.222
# Redis数据库索引(默认为0)
spring.redis.database=0 
# Redis服务器连接端口
spring.redis.port=6379 
# Redis服务器连接密码(默认为空)
#spring.redis.password=
## 连接超时时间(毫秒)
spring.redis.timeout=30000
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=1
#连接池中最大空闲等待时间,3s没有活干的时候直接驱逐该链接
spring.redis.lettuce.pool.min-evictable-idle-time-millis = 3000
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1

4.使用Redis

StringTest

@SpringBootTest(classes = App.class)
class StringTest {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    private final String key = "zhengzhou";
    @Test
    public void set() {
        stringRedisTemplate.opsForValue().set(key, "我的家乡", 30, TimeUnit.SECONDS);
    }
    @Test
    public void  get(){
        System.out.println(stringRedisTemplate.opsForValue().get(key));
    }
}

SetTest

@SpringBootTest(classes = App.class)
public class SetTest {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    private final String key = "city";
    @Test
    public void set() {
        stringRedisTemplate.opsForSet().add(key,"北京","上海","广州","深圳");
    }
    @Test
    public void get() {
        System.out.println(stringRedisTemplate.opsForSet().members(key));
    }
}

ListTest

@SpringBootTest(classes = App.class)
public class ListTest {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    private final String key = "studentName";
    @Test
    public void leftPush() {
        stringRedisTemplate.opsForList().leftPush(key, "张三");
        stringRedisTemplate.opsForList().leftPush(key, "李四");
    }
    @Test
    public void rightPush() {
        stringRedisTemplate.opsForList().rightPush(key, "王五");
        stringRedisTemplate.opsForList().rightPush(key, "赵六");
    }
    @Test
    public void leftPop() {
        System.out.println(stringRedisTemplate.opsForList().leftPop(key));
    }
    @Test
    public void index() {
        System.out.println(stringRedisTemplate.opsForList().index(key, 1));
    }
    @Test
    public void range() {
        System.out.println(stringRedisTemplate.opsForList().range(key, 0, 1));
    }
    @Test
    void test6() {
        // 如果一些原生命令,spring 没有给我们封装,使用redisTemplate.execute(new RedisCallback)自定义命令
        while (true) {
            System.out.println("开始一轮监听");
            byte[] rawResults = stringRedisTemplate.execute(new RedisCallback<byte[]>() {
                @Override
                public byte[] doInRedis(RedisConnection connection){
                    List<byte[]> list = connection.bRPop(10, key.getBytes());
                    if (list != null && list.size() > 0) {
                        System.out.println(new String(list.get(0)));
                    }else {
                        System.out.println("没有数据");
                    }
                    return null;
                }
            });
            return;
        }
    }
}

HashTest

@SpringBootTest(classes = App.class)
public class HashTest {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    private final String key = "student.1";
    @Test
    public void set() {
        stringRedisTemplate.opsForHash().put(key, "name",  "张三");
        stringRedisTemplate.opsForHash().put(key, "age",  "18");
        stringRedisTemplate.opsForHash().put(key, "city",  "北京");
        stringRedisTemplate.opsForHash().put(key, "sex",  "男");
    }
    @Test
    public void get() {
        Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key);
        System.out.println(entries);
    }
}

ZSetTest

@SpringBootTest(classes = App.class)
public class ZSetTest {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private final String key ="张三";
    @Test
    public void  test(){
        //添加张三的成绩
        stringRedisTemplate.opsForZSet().add(key,"语文",98);
        stringRedisTemplate.opsForZSet().add(key,"数学",87);
        stringRedisTemplate.opsForZSet().add(key,"英语",75);
    }
}

5.测试结果

可使用免费版Navicat连接redis数据库,查看存储结果
Spring Boot集成Redis_第1张图片

你可能感兴趣的:(spring,boot,redis,后端,学习)