下载地址:https://redis.io/download
将下载完的redis-5.0.3.tar.gz文件上传到linux服务器的指定目录下,本次上传目录为/install。
执行命令解压:tar -zxvf redis-5.0.3.tar.gz
,解压后如下图:
cd redis-5.0.3
make
此时有报错:
提示cc命令找不到,此时需要安装gcc插件,执行命令yum install gcc
,安装完之后,再次执行make命令,仍然有错误提示:
此时,在执行make命令的时候,修改命令为make MALLOC=libc
继续安装,即可解决该问题。
继续安装:
make install
看到如下提示信息,说明安装完成。
有时候,在执行make install
命令的时候,会提示如下错误:cc: …/deps/hiredis/libhiredis.a: No such file or directory,此时需要进入到redis下的deps目录下,执行如下命令make lua hiredis linenoise
回到主目录再次执行make install
命令即可安装成功。
拷贝安装文件到指定目录:
cp -r redis-5.0.3 /usr/local/redis
在redis安装目录下,有个redis-server执行文件,用于启动redis服务端,我们执行这个命令:
看到如上所示回显信息,则说明redis安装成功。但是,此时redis并非以守护进程运行,一旦我们使用ctrl+c终止会话,redis进程也将被终止;同时,我们发现登录redis不需要任何账号密码,这对于数据安全性而言,具有很大隐患。接下来,我们通过修改配置来进行各种设置。
redis的各种配置主要是修改redis,conf文件:
(1)启用守护进程方式运行
使用编辑命令vim或者vi编辑redis.conf文件,找到daemonize no
,将"no"修改为yes,如下所示:
(2)修改redis监听端口
继续在redis.conf文件中查找port
关键字,如下:
修改6379为所需端口号,本次不做修改。
(3)修改绑定的主机地址
搜索bind
关键字,默认绑定地址为127.0.0.1,即只允许本机访问,我们将其修改为0.0.0.0,这样外网也就可以访问redis了:
(4)修改redis登录所需密码
上一步我们将redis修改为可以被任何一台机器访问,这样很不安全,所以我们需要设置密码。在redis.conf配置文件中搜索requirepass
,将注释放开,设置自定义密码,本次我设置的密码是123456,如下:
(5)关闭保护模式
上一步设置了redis访问密码,此处就可以将redis默认的保护模式关闭了,搜索protected-mode
,将其设置为no,如下:
(6)设置超时时间
当客户端长时间不使用连接时,可以将连接关闭,修改redis.conf中的timeout
值,默认是0,修改为300,单位是秒,即某个连接5分钟不使用,就回收该链接:
(1)启动redis服务
配置完成之后,我们尝试启动redis服务,使用如下命令启动:
cd src/
./redis-server ../redis.conf
./redis-cli -a 123456
-a 123456表示使用123456密码作为登录认证,回显信息如下:
说明连接成功
修改防火墙配置,使6379端口可以被外部访问:
vim /etc/sysconfig/iptables
在里边加入加入如下访问规则:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
(1)引入maven依赖
根pom文件中引入如下依赖:
org.springframework.boot
spring-boot-starter-data-redis
(2)配置application.yml文件
springboot全局配置文件applicaiton.yml中加入如下redis单机配置项:
spring:
#redis单点配置
redis:
database: 0
host: 192.168.172.129
port: 6379
password: 123456
jedis:
pool:
max-active: 8
max-idle: 8
max-wait: -1ms
min-idle: 0
(3)新建实体类User用于测试,需要实现java.io.Serializable接口。
public class User implements Serializable {
private Long id;
private String name;
private Byte sex;
private String phone;
private Byte age;
private Boolean status;
private String address;
//getter,setter
}
(4)新建controller用于测试:
@RestController
@RequestMapping("/test/redis")
public class RedisTestController {
@Autowired
RedisTemplate redisTemplate;
@Autowired
StringRedisTemplate stringRedisTemplate;
@GetMapping("/single")
public void testWriteAndReadRedis(){
ValueOperations operations=stringRedisTemplate.opsForValue();
//存入一个string类型的值
operations.set("name","三国演义");
//获取string类型的值
System.out.println(operations.get("name"));
ValueOperations valueOperations = redisTemplate.opsForValue();
User user=new User();
user.setAddress("陕西西安");
user.setId(new Date().getTime());
user.setSex((byte)1);
//存入一个对象
valueOperations.set("user",user);
//获取一个对象
System.out.println(valueOperations.get("user"));
}
}
访问url:https://localhost:8081/test/redis/single ,查看控制台日志打印:
说明springboot整合redis单机模式成功。
在上面的例子中,可以看到:操作字符串的时候,我们使用的是StringRedisTemplate,操作对象的时候,使用的是RedisTemplate,两者的关系是:
A.StringRedisTemplate是RedisTemplate的子类:
他们对于对key值进行序列化的时候,默认都是采用StringRedisSerializer方式,但是对于value值进行序列化的时候,StringRedisTemplate仍然采用StringRedisSerializer方式,而RedisTemplate使用的是JdkSerializationRedisSerializer。尽管如此,他们操作redis的方法都是一样的。即通过opsForValue(),opsForZset(),opsForSet()等方法获取一个对象,然后再使用该对象完成数据的读写。