Redis学习笔记(二) | 青训营笔记

121 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

上一章简单记录了redis的一些基础操作,这一章主要记录如何用java语言操作redis,即Redis的JAVA客户端

一.Jedis

1.开始使用

a.引入依赖

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

b.建立连接

private Jedis jedis;

@BeforeEach//单例测试的语法
void setUp(){
	//建立连接
	jedis = new Jedis("ip",port);
	//设置密码
	jedis.auth("password");
	//选择库
	jedis.select(0);
}

c.释放资源

@AfterEach
void tearDown(){
	//释放资源
	if (jedis != null) {
		jedis.close();
	}
}

2.Jedis连接池

Jedis本身线程不安全,且频繁地创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池。

		private static final JedisPool jedisPool;

    static {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大连接
        jedisPoolConfig.setMaxTotal(8);
        //最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        //最小空闲连接
        jedisPoolConfig.setMinIdle(0);
        //设置最长等待时间,ms,默认-1(无限制等待)
        jedisPoolConfig.setMaxWaitMillis(200);
        jedisPool = new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000,"123456");
    }
    //获取Jedis对象
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

二.SpringDataRedis

1.开始使用

a.环境依赖

<!-- 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>

b.配置文件

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: root
    lettuce:
      pool:
        max-active: 8 #最大连接数
        max-idle: 8 #最大空闲连接
        min-idle: 0 #最小空闲连接
        max-wait: 100 #连接等待时间

c.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

2.有关序列化

存进去的key和value被当做java对象,默认采用jdk序列化的方式转化成redis可以识别的内容

a.引入Jackson依赖

<!-- Jackson -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.13.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.13.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.13.4</version>
</dependency>

b.config配置

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        //创建RedisTemplate对象
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        //设置连接工厂
        redisTemplate.setConnectionFactory(connectionFactory);
        //创建JSON序列化工具
        Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //设置key的序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        //设置Value的序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashKeySerializer(jsonRedisSerializer);
        //返回
        return redisTemplate;
    }
}

两个方案

  • 方案一:如上,自定义RedisTemplate,但是会有多余的空间保存序列化的类
  • 方案二:
    • 使用StringRedisRTemplate
    • 写入时手动把对象序列化成JSON
    • 读出时手动把读取到的JSON反序列化成对象