springboot 整合redis

一、Jedis

package com.example.redis;

import redis.clients.jedis.Jedis;

import javax.print.DocFlavor;
import java.util.*;

/**
 * @ClassName Mydemo
 * @Description TODO
 * @Author lukcy
 * @Date 2024/6/23 10:31
 * @Version 1.0
 */
public class Mydemo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        //有密码的话
//        jedis.auth("qqqqqq");
        //看是否连接上
        System.out.println(jedis.ping());

        Set<String> keys = jedis.keys("*");
        System.out.println(keys);

        //String

        jedis.set("k1","v1");
        System.out.println(jedis.get("k1"));
        System.out.println(jedis.ttl("k1"));
        System.out.println(jedis.expire("k1",20L));

        //list
        jedis.lpush("list","11","22");
        List<String> list = jedis.lrange("list", 0, -1);
        for (String s : list) {
            System.out.println(s);
        }
        //hash
        jedis.hset("hash","k2","2");
        System.out.println(jedis.hget("hash","k2"));
        Map<String,String> map=new HashMap<String,String>();
        map.put("k3","3");
        map.put("k4","4");
        jedis.hmset("hash1",map);

        //set
        jedis.sadd("k6","6");
        jedis.sadd("k6","7");
        jedis.sadd("k6","7");
        Set<String> set1 = jedis.smembers("k6");
        for (Iterator iterator =set1.iterator(); iterator.hasNext();)
        {String string=(String)iterator.next();
            System.out.println(string);}
        jedis.srem("orders","jd002");
        System.out.println(jedis.smembers("orders").size());
        jedis.zadd("k9",20d,"9");

    }
}

二、Lettuce

在这里插入图片描述

package com.example.redis;

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.sync.RedisCommands;

import java.util.List;

/**
 * @ClassName Mydemo2
 * @Description TODO
 * @Author lukcy
 * @Date 2024/6/23 11:07
 * @Version 1.0
 */
public class Mydemo2 {
    public static void main(String[] args) {
//        RedisURI.builder().redis("127.0.0.1").withPort(6379).withAuthentication("default","11111").build();
        RedisURI build = RedisURI.builder().redis("127.0.0.1").withPort(6379).build();
        //获得客户端
        RedisClient redisClient = RedisClient.create(build);
        StatefulRedisConnection<String, String> connect = redisClient.connect();
        //通过conn 获得command
        RedisCommands commands = connect.sync();
        //业务逻辑
        List keys = commands.keys("*");
        for (Object key : keys) {
            System.out.println(key);
        }
        //释放
        connect.close();
        redisClient.shutdown();



    }
}

三、RedisTemplate(重点)

单机

springboot可以整合的,lettuce其实就被整合到了这个包里。

pom

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

在这里插入图片描述

service.java

package com.example.redis.controller;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @ClassName Service1
 * @Description TODO
 * @Author lukcy
 * @Date 2024/6/23 16:19
 * @Version 1.0
 */
@Service
@Slf4j
public class Service1 {
    public static final String ORDER_KEY = "ord:";
    @Resource
    private RedisTemplate redisTemplate;
    public void addorder(){
    int keyId = ThreadLocalRandom.current().nextInt(1000)+1;
    String serialNo = UUID.randomUUID().toString();
    String key= ORDER_KEY+keyId;
    String value ="京东订单"+serialNo;
    redisTemplate.opsForValue().set(key,value);
    log.info("***key:{}",key);
    log.info("***value:{}",value);
}
  public String getOrdeByID(Integer key_id){
    return (String) redisTemplate.opsForValue().get(ORDER_KEY+key_id);
    }
}

controller.java

package com.example.redis.controller;


import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
@Tag(name = "订单接口")
public class HelloController {
    @Autowired
    public Service1 service1;
    @GetMapping("order/add")
    @Operation(summary = "新增订单", description = "新增订单")
    public void addOrd() {
        service1.addorder();
    }
    @GetMapping("order/{id}")
    @Operation(summary = "查询订单", description = "查询订单")
    public String getorder( @PathVariable Integer id){
        return service1.getOrdeByID(id);
    }

}

3.1 springboot 整合swagger

博客链接
springboot3 整合swagger2和3时都会报错,可以看上边博客。
之后我们进入swagger

在这里插入图片描述
可以在这里直接进行http请求。

3.2 序列化+中文问题

在上边代码 我们使用的是RedisTemplate 它使用默认的序列化器 所以我们会看到存储到redis中显示
在这里插入图片描述
在这里插入图片描述
并不是我们存储的ord+序号

如果我们想要是我们存储的 可以使用StringRedisTemplate

package com.example.redis.controller;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @ClassName Service1
 * @Description TODO
 * @Author lukcy
 * @Date 2024/6/23 16:19
 * @Version 1.0
 */
@Service
@Slf4j
public class Service1 {
    public static final String ORDER_KEY = "ord:";
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    public void addorder(){
    int keyId = ThreadLocalRandom.current().nextInt(1000)+1;
    String serialNo = UUID.randomUUID().toString();
    String key= ORDER_KEY+keyId;
    String value ="京东订单"+serialNo;
        stringRedisTemplate.opsForValue().set(key,value);
    log.info("***key:{}",key);
    log.info("***value:{}",value);
}
  public String getOrdeByID(Integer key_id){
    return stringRedisTemplate.opsForValue().get(ORDER_KEY+key_id);
    }
}

这样子存储的就是 在这里插入图片描述

如果在redis中 要显示中文 可以在后边加上–raw 如果还不是中文 可以先输入
在这里插入图片描述
之后在进入客户端

就是中文了。

集群

3.3 applications配置

在这里插入图片描述

3.4 问题

在这里插入图片描述

如果一个主机宕机,虽然再服务器redis上已经从机上机了,故障迁移成功,但是java服务器
并没有检测到最新的消息。

解决方法:开启自动刷新
在这里插入图片描述

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值