Redis的学习过程
一.Redis的安装和各种配置
1.安装
- Redis官方网站: link
- 在centos中安装gcc编译器( 终端命令为 yum install gcc)
ps:gcc可能会安装失败,这是需要切换centos-vault源,可根据https://developer.aliyun.com/mirror/这个网址提示进行操作。 - 下载redis-6.2.1.tar.gz放/opt目录,并解压到此文件夹里。
- 解压完成后进入目录:cd redis-6.2.1,在redis-6.2.1目录下再次执行make命令(进行编译)
- 继续执行: make install
2.设置后台启动
- 备份redis.conf:拷贝一份redis.conf到其他目录 指令:cp /opt/redis-3.2.5/redis.conf /myredis
- 修改redis.conf文件将里面的daemonize no 改成 yes,让服务在后台启动
- Redis启动:redis-server /myredis
- 用客户端访问:redis-cli
二. 常用指令(就不在这多写了)
三.配置文件
网络相关配置
1.bind
默认情况bind=127.0.0.1只能接受本机的访问请求,不写的情况下,无限制接受任何ip地址的访问,生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉
![在这里插入图片描述保存配置,停止服务,重启启动查看进程,不再是本机访问了。](https://img-blog.csdnimg.cn/f738c6bc672c4d69a32c308fcbca9b10.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NET
保存配置,停止服务,重启启动查看进程,不再是本机访问了。
2.protected-mode
将本机访问保护模式设置no
3.Port
端口号,默认 6379
Jedis
1.Jedis所需要的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
2.连接Redis注意事项
1.关闭防火墙
service iptables stop : 一次性关闭防火墙,当前有效, 下次启动无效。
chkconfig iptables off : 永久关闭防火墙, 下次启动有效, 当前无效 。
2.redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no。
3.redis要启动。
3.测试程序
public class JedisDemo {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.83.129",6379);
String ping = jedis.ping();
jedis.set("k1","v1");
jedis.set("k2","v1");
jedis.set("k3","v1");
Set<String> keys = jedis.keys("*");
for (String key:keys){
System.out.println(key);
}
System.out.println(jedis.get("k1"));
System.out.println(ping);
}
}
四、持久化-RDB、AOF
1.RDB:在指定的时间间隔内,将内存的数据集快照(dump.rdb)写入磁盘内,默认保存的文件名为dump.rdb。
修改保存rdb保存的间隔,可以修改redis的配置文件redistribution.config
RDB的优势:1、适合大规模的数据恢复。 2、按照业务定时备份。
3、RDB在内存中比AOF快。
劣势:1、数据易丢失,因为备份是按照一定的时间间隔进行备份的 。
2. 数据全量同步,如果数据量大会导致IO影响服务器性能。
2.AOF:通俗的讲就是把redis的写操作(不记录读操作)以日志的形式保存在appendonly.aof文件中
如何开启AOF:配置文件中将 appendonly no改成appendonly yes
工作流程:
1、Client作为命令的来源,会有多个源头以及源源不断的请求命令
2、在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
3、AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。
4、随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的。
5、当Redis Server 服务器重启的时候会从AOF文件载入数据。
回写策略:
always:同步回写,每写一个读操作都会立刻同步到磁盘中
everysec:每秒同步一次
no:先写到AOF缓存,何时写到磁盘由操作系统决定
回写机制: 启动AOF文件压缩,只保留可恢复数据的最小指令集(如: set k1 v1 set k1 v2 如果此时触发重写机制那么日志文件只保存 set k1 v2 这条指令 如果没有触发则两条指令都会被保存)。
默认配置:同时满足上面两个条件才会触发重写机制
AOF优势: 数据不易丢失
AOF劣势: 文件大小会比rdb大,且恢复速度比rdb慢
3.RDB+AOF:如果同时开启默认先加载AOF(官方推荐开启RDB+AOF混合模式)
如何开启: aof-use-rdb-preamble的值为 yes yes表示开启,设置为no表示禁用。
结论: RDB镜像做全量持久化,AOF做增量持久化
先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式
五、事务:保证一组指令能按顺序执行,且不会被其它指令插入。
1.和mysql事务的区别
单独隔离: redis是单线程架构,在没有执行完事务内的所有指令时,是不会接收别的客户端的请求。
没有隔离级别: 因为所有的指令在事务没有提交前都不会被实际的执行,所以也就不存在隔离级别的概念。
不保证原子性: 只能决定一个事务内指令执行的开始,并不能保证所有指令全部成功或者全部失败,没有回滚功能。
排它性: 在执行一个事务内的指令时,不会被其它指令插入。
2.常用命令
3.操作
正常执行
放弃事务
全部不执行
全部执行
watch监控: redis使用watch提供乐观锁类似于CAS