springboot集成redis

使用springboot集成redis

1.Jedis使用

创建springboot项目,pom文件加入maven

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

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

使用Jedis,也要加入Jedis的依赖

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
</dependency>

 

代码

//redis 服务ip和端口
Jedis jedis = new Jedis("ip地址", 6379);

//redis密码
jedis.auth("123456");

//测试是否成功
System.out.println(jedis.ping());

成功

 

命令API大多都见名知意,这里就简单列举几个。

//redis 服务ip和端口
Jedis jedis = new Jedis("localhost", 6379);

//redis密码
jedis.auth("123456");

//测试是否成功
System.out.println(jedis.ping());

//string类型
System.out.println("String-----");
jedis.set("k1","v1");
System.out.println(jedis.get("k1"));
System.out.println("过期时间:" + jedis.ttl("k1"));
jedis.expire("k1",20L);
System.out.println("过期时间:" + jedis.ttl("k1"));


//list类型
System.out.println("list-----");
jedis.lpush("list1","1","2","3");
List<String> list = jedis.lrange("list1", 0, -1);
for (String e : list) {
System.out.print(e + " ");
}
System.out.println();


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

 

2.lettuce使用

Jedis客户端连接Redis服务器的时候,每个线程都要自己创建Jedis实例去连接。

由此诞生了lettuce。

maven的pom文件加入依赖

<dependency>
  <groupId>io.lettuce</groupId>
  <artifactId>lettuce-core</artifactId>
</dependency>

 

代码示例

//使用构造器链式编程来builder
RedisURI uri = RedisURI.builder()
        .redis("localhost")
        .withPort(6379)
        .withAuthentication("default", "123456")
        .build();

//连接客户端
RedisClient redisClient = RedisClient.create(uri);
StatefulRedisConnection connect = redisClient.connect();


//通过connect创建command
RedisCommands commands = connect.sync();


commands.set("k1","v1");
System.out.println(commands.get("k1"));


List keys = commands.keys("*");
System.out.println(keys);


//关闭释放资源
connect.close();
redisClient.shutdown();

其会输出日志

 

3.RedisTemplate使用

其底层使用的就是lettuce。

加入依赖

<!--SpringBoot与Redis整合依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
</dependency>

 

可以看到包含lettuce依赖。

 

在application.yml加入配置

spring:
  redis:
    database: 0
    host: 8.134.133.76
    password: 123456
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0

在Service中注入

@Resource
private RedisTemplate redisTemplate;

 

然后就可以在业务中使用。 大致使用方法如下

redisTemplate.opsForValue(); //提供了操作string类型的所有方法
redisTemplate.opsForList(); // 提供了操作list类型的所有方法
redisTemplate.opsForSet(); //提供了操作set的所有方法
redisTemplate.opsForHash(); //提供了操作hash表的所有方法
redisTemplate.opsForZSet(); //提供了操作zset的所有方法
如:
redisTemplate.opsForValue().set(key,value);
System.out.println(redisTemplate.opsForValue().get(key));

 

但是由于序列化问题,默认存的key会是一串我们不认识的字符串。

"\xac\xed\x00\x05t\x00\aord:102" 没有序列化过

因为默认键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。而RedisTemplate默认使用的是却是JdkSerializationRedisSerializer。

在源码,默认使用JDK 序列化方式

不过StringRedisTemplate默认使用的是StringRedisSerializer。

 

所以

第一种方法,直接使用StringRedisTemplate,不过redis客户端获取值还是一串我们不认识的字符串(登入客户端加入–raw参数就正常了,如redis-cli -a 123456 –raw)。其余到正常了。

@Resource
private StringRedisTemplate redisTemplate;

 

第二种方法,加入配置类

参考StringRedisTemplate

package com.dreams.redis7.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig
{
    /**
    * redis序列化的工具配置类,下面这个请一定开启配置
    */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory)
    {
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        //设置key序列化方式string
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

这样就正常了。

 

4.集群使用redis

在application.yml加入配置

spring:
  redis:
    password: 123456
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
    cluster:
      max-redirects: 3
      nodes: 8.134.133.76:6381,8.134.133.76:6382,8.134.133.76:6383,8.134.133.76:6384,8.134.133.76:6385,8.134.133.76:6386

 

但是一旦一个主机宕机,SpringBoot客户端没有动态感知到RedisCluster的最新集群信息

开启集群拓扑动态感应刷新,在application.yml加入配置即可

spring:
  redis:
    password: 123456
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
      cluster:
        refresh:
          #支持集群拓扑动态感应刷新,自适应拓扑刷新是否使用所有可用的更新,默认false关闭
          adaptive: true
          #定时刷新
          period: 2000
    cluster:
      max-redirects: 3
      nodes: 8.134.133.76:6381,8.134.133.76:6382,8.134.133.76:6383,8.134.133.76:6384,8.134.133.76:6385,8.134.133.76:6386

 

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇