Redis在企业开发中通常充当高速缓存的作用,用于保护接口或者数据库。在高并发的场景、分布式场景下也可以充当分布式锁,避免多个JVM进程在同一时间对同一资源进行修改,从而引发非线程安全的问题。
一.Redis安装
下载链接
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到指定位置,解压后,将文件夹重新命名为 redis。
使用时启动服务端和客户端
二.Spring中如何使用Redis
在 Java 中与 Redis 连接的驱动存在很多种 ,目前比较广泛使用的是 Jedis , 其他的还有 Lettuce 、Jredis和Srp。这里只讨论只讨论 Spring 推荐使用的类库 Jedis 的使用 。
Spring 提供了 一个 RedisConnectionFactory 接口, 通过它可以 生成一个 RedisConnection 接口 对象 ,而 RedisConnection 接口对象是对 Redis 底层接口的封装 。 例如 , 本章使用的 Jedis 驱动,那么 Spring就会提供 RedisConnection 接口的实现类 JedisConnection 去封装原有的 Jedis ( redis.clients.jedis.Jedis )对象 。
1.配置RedisConnectionFactory工厂类
配置这个工厂主要是配置 Redis 的连接池,对于连接池可以限定其最大连接数、超时时间等属性。
//代码清单1:
package com.springboot.chapter7.config;
/**** imports ****/
@Configuration
public class RedisConfig {
private RedisConnectionFactory connectionFactory = null;
@Bean(name = "redisConnectionFactory")
public RedisConnectionFactory initConnectionFactory() {
if (this.connectionFactory != null) {
return this.connectionFactory;
}
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大空闲数
poolConfig.setMaxIdle(50);
// 最大连接数
poolConfig.setMaxTotal(100);
// 最大等待毫秒数
poolConfig.setMaxWaitMillis(2000);
// 创建Jedis连接工厂
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);
// 配置Redis连接服务器
RedisStandaloneConfiguration rsc = connectionFactory.getStandaloneConfiguration();
//本机的IP地址,可以通过cmd窗口ipconfiig查看
rsc.setHostName("10.160.64.151");
rsc.setPort(6379);
//redis安装后默认是没有密码的
//rsc.setPassword(RedisPassword.of("cwc8469619"));
this.connectionFactory = connectionFactory;
return connectionFactory;
}
}
2.RedisTemplate
RedisTemplate是 Spring 操作 Redis 的重点内容。 RedisTemplate是一个强大的类,首先它会自动从 RedisConnectionFactory 工厂中获取连接,然后执行对应的 Redis命令,在最后还会关闭 Redis 的连接。在代码清单 1的基础上加入代码清单 2。
此外Spring 提供了 RedisSeri alizer 接口,它有两个方法。这两个
方法,一个是 serialize , 它能把那些可以序列化的对象转换为二进制字符串;另一个是 deserialize,它能够通过反序列化把二进制字符串转换为 Java 对象 。
//代码清单2:
@Bean(name="redisTemplate")
public RedisTemplate<Object, Object> initRedisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//RedisTemplate会自动初始化StringRedisSerializer,所以这里直接获取
RedisSerializer<String> stringRedisSerializer = redisTemplate.getStringSerializer();
//设置字符串序列化器,这样Spring就会把Redis的key当作字符串处理
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
redisTemplate.setConnectionFactory(initConnectionFactory());
return redisTemplate;
}
3.创建启动类测试RedisTemplate
//代码清单3:
package com.springboot.chapter7.main;
/**** imports ****/
public class Chapter7Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(RedisConfig.class);
RedisTemplate redisTemplate = ctx.getBean(RedisTemplate.class);
redisTemplate.opsForValue().set("key1", "value1");
redisTemplate.opsForHash().put("hash", "field", "hvalue");
/*useSessionCallback(redisTemplate);
// useRedisCallback(redisTemplate);
ctx.close();*/
}
}
运行启动类,启动redis服务端和客户端,在客户端如下图测试,成功查询到redis数据: