SpringBoot使用Redis集群

上一节 简单介绍了SpringBoot如何使用Redis。使用的是单机版,但在实际应用中,为了性能的更稳定、响应速度更快,以及分布式的使用,更多的是倾向于Redis集群模式。凡事先简后难,使用一个东西,首先必须保证在这上面的初期你会得到小的满足感,也就是说,你能感觉到有所谓的成就感。掌握了常规的Redis的使用,了解后你才有兴趣去探索和完成集群又是个什么东东吧。说实话,集群还真不是个人开发能轻易达到的标准。首先要明白的是,实操就得6台电脑才能完成,个人用户怎么可能有6台电脑来搞嘛,对吧。但也有方法,现在各大云服务器都有免费试用版,一个月的期限。反正闲置也是闲置,花点功夫,实名认证一下,也可以搞到少说七八台吧。搞到了就开始实操吧。

在这里插入图片描述

看了很多帖子都有关Redis如何搭建集群的,但总感觉少了点什么,因为大多都是在同一台电脑上分配6个节点来进行集群创建,并不是理想的状态,所以自己就搞了6台服务器,来体验一下这种不一样的感觉吧。首先来看下集群的启动状态:

在这里插入图片描述

创建SpringBoot项目后,打开application.properties进行配置:

# 配置启动默认端口
server.port=8080

# 单机模式
# spring.redis.host=127.0.0.1
# 端口
# spring.redis.port=6379

# 集群模式
spring.redis.cluster.nodes=39.107.65.223:6379,154.8.183.144:6379,124.71.148.52:6379,183.60.104.198:6379,42.193.5.237:6379,8.135.26.156:6379
# 密码
spring.redis.password=123@56

创建简单测试类Book,这里继续简单说明下:继承 Serializable 是为了使用@ResponseBody返回对象的时候能够对其进行json序列化,从而返回对应的json数据格式。

package com.redis.pojo;

import java.io.Serializable;

public class Book implements Serializable {
    
    
    private String ID;
    private String Name;
    private String Author;
    private String Press;
    private String Key;

    public String getID() {
    
    
        return ID;
    }

    public void setID(String ID) {
    
    
        this.ID = ID;
    }

    public String getName() {
    
    
        return Name;
    }

    public void setName(String name) {
    
    
        Name = name;
    }

    public String getAuthor() {
    
    
        return Author;
    }

    public void setAuthor(String author) {
    
    
        Author = author;
    }

    public String getPress() {
    
    
        return Press;
    }

    public void setPress(String press) {
    
    
        Press = press;
    }

    public String getKey() {
    
    
        return Key;
    }

    public void setKey(String key) {
    
    
        Key = key;
    }
}

编写一个Controller进行Redis集群验证和使用,并设置过期时间:Java好处就是使用Redis的时候,永远比.NET Core方便。就比如我在整理给Redis设置过期时间的时候,.NET Core还得实例化另一个对象才能对其才能设置过期时间,在我的另一篇博文ASP.NET Core使用Redis有详细介绍。

 //设置过期时间
 var options = new DistributedCacheEntryOptions()
 .SetSlidingExpiration(TimeSpan.FromSeconds(30));

 //使用Set存储Redis对象
 distributed.Set("timeout", bytes, options);

而在Java中就相当简单了,只需在Set<key,value,long,time>加上相应的属性即可,使用起来可谓相当舒服了!

 ValueOperations opsis=redisTemplate.opsForValue();
 //opsis.set("book"+i,book);
 opsis.set("book"+i,book,10, TimeUnit.HOURS);

以下是完整的SpringBoot使用Redis集群Controller完整示例代码:

package com.redis.controller;

import com.redis.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Controller
@RequestMapping("/home")
public class HomeController {
    
    
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @RequestMapping("/redis")
    @ResponseBody
    public List<Book> Test(){
    
    
        List<Book> books=new ArrayList<>();
        for (int i=0;i<1000;i++){
    
    

            //存储String
            ValueOperations<String,String> opsi=stringRedisTemplate.opsForValue();
            opsi.set("key"+i,"SpringBoot中使用StringRedisTemplate存储字符串,RedisTemplate存储对象",10,TimeUnit.HOURS);

            Book book=new Book();
            book.setID(UUID.randomUUID().toString().replace("-",""));
            book.setName("日出东方");
            book.setAuthor("东方不败");
            book.setPress("贵大出版社");
            book.setKey(opsi.get("key"+i));
            books.add(book);
        }

        //存储对象
        ValueOperations ops=redisTemplate.opsForValue();
        ops.set("books",books,2, TimeUnit.HOURS);
        List<Book> list=(List<Book>)ops.get("books");
        return list;
    }
}

最后的运行结果:

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42799562/article/details/112270389