最近大致在学习了一遍Redis相关的知识,这里只是做简单的记录。如果有遗落的和很多没说到的方面的知识,还希望各位能够指出来,多多指教,一起学习,一起进步。
首先得明白什么是Redis?
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。这是简单得介绍了下Redis。
单线程的Redis:
好处:没有多线程或者多进程的切换来消耗CPU;Redis也是线程安全的。
坏处:无法发挥多核CPU的性能。
Redis的一些基本使用场景有那些?
- Token的生成(现在许多分布式或者微服务项目中;使用的Token都会存放Redis中;并且设置相应的过期时间)
- 缓存;对一些查询频繁很高的内容进行缓存,那样在很大的程度上减少了DB那层的压力。(不过也有很多人会利用你的Key设计漏洞,也对你进行缓存穿透)
- 一些短信验证码也会存在Redis中
- 使用Redis实现分布式锁(估计这也是很多刚刚学习分布式朋友最感兴趣的)
这是一些Redis使用比较多的场景,还有其他的场景,请各位大佬在下面评论加上。
如何在Linux上安装Redis?(这里作者使用的是Centos7)
- wget http://download.redis.io/releases/redis-3.2.9.tar.gz 直接在Linux上下载Redis安装包
-
tar -zxvf redis-3.2.9.tar.gz 解压Redis安装包
-
cd redis-3.2.9 进入解压下的Redis目录
-
make编译 make之前请先确保你有相应的环境 (yum -y install gcc-c++) 如果没在make会出现报错。https://blog.csdn.net/weixin_40493969/article/details/81150469 给出相应的处理地址。
-
cd src 进入src目录下
-
make install PREFIX=/usr/local/redis 安装到usr/local/redis下
-
mkdir ../../../usr/local/redis/etc 当你当前的路径下,/usr/local/redis下创建etc目录
-
mv ../redis.conf /usr/local/redis/etc/ 移动配置文件去你/usr/local/redis/etc目录下
-
cd /usr/local/redis/etc/ 进入你redis下修改配置文件
-
vi redis.conf 将daemonize no 改成daemonize yes 这个是后台启动 requirepass 123 这个是修改密码 看个人
-
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 这是启动Redis指令
-
cd /usr/local/redis/bin ./redis-cli -h 127.0.0.1 -p 6379 ping 这是会显示PONG就说明你安装成功。
如果是本地Vm安装的虚拟机,在使用连接工具的时候,记得关闭防火墙(温馨提示)。#bind 127.0.0.1 开启外网访问
Redis的基本类型有哪些?
String类型
.Redis的存储方式是键值对,这里Value不仅仅可以是String,也可以是数字。String在Redis内部存储默认是一个字符 串,被 redisObjecy所引用。当有incr,desc等操作是.会转变成数值类型进行计算。
List列表
Reids中的list的实现为一个双向链表,是可以正反查询的。同时会有额外的内存开销。List有很多应用场景,比如一些展示的列表等。下面是简单的list操作。
Hash类型 字典类型
Redis中的Hash中Value对用的就是一个HashMap(Java中,作者是Java开发).当Hash的成员比较少的时候,Redis会采用类似于一维数组的方式来紧凑存储,而不是真正的HashMap格式.当成员增大时,就会转成真正的HashMap。
Set 类型 集合
唯一无需集合。也就是说集合中不可能出现重复的。集合都是用过哈希表来实现的,所以复杂度都是O(1)
Sorted Set 有序集合
Redis中的有序集合,也是唯一的,也就是说没有重复的元素。每个元素都会关联一个double类型的分数,然后通过分数来为集合中的成员进行从大到小的排序。有序集合的成员是唯一的,但是分数是可以相同的。集合也是通过哈希表来实现的。
Redis的主从复制
1. redis的复制功能是支持多个数据库之间的同步。也就是主从数据库(主数据库Master;从数据库slave).一般主数据库可以进行读和写;从数据库一般都是读。然后从数据库接收主数据库通过过来的数据。一个主数据库可以有多个从数据库,而一个从数据库一般只有一个主数据库。
2. 通过Redis的复制功能可以很好的实现数据库的读写分离,提供服务器的负载能力。
主从复制的过程:
1. 当一个从数据库启动时;会向著数据库发送sync命令。
2. 主数据接收sync命令后,会开始在后台保存快照,也就是默认的rdb文件。
3. 当快照完成后,Redis会将快照文件和所有的缓存的命令发送给从数据库。
4. 从数据库收到后,会载入快照文件并执行收到缓存的命令。
图画到比较粗糙;各位大佬将就着看下。
主从复制就修改下配置文件:
修改slave从redis中的 redis.conf文件
slaveof 192.168.30.128 6379 (这里写主服务)
masterauth meng (如果你主服务器中有密码;这里也要相应的加上密码)
Redis的持久化?
Redis的持久化是有二种实现方法的。
RDB是以二进制文件,在哪一个时刻将数据写入一个临时节点,持久化结束后,用这个临时文件替换上次持久化的文件,来恢复数据。
优点:使用单独子进程来进行持久化;主进程不进行任何IO操作。保证了Redis的高性能。
缺点:由于是间隔时段持久化,就会有数据丢失问题。RDB是默认开启的。
AOF(Append only file)持久化:
优点:可以保持数据的完整性。
缺点: AOF文件比RDB文件大,恢复速度慢。
AOF可以简单的理解为就是日志文件,此文件只会记录记录的操作。如果有大量的变更操作,也就是以为AOF文件很大,数据恢复会是一个长时间。实际情况;一条数据经过多次的变更,将会有很多AOF记录生成,其实只用保证当前的,之前的该条历史记录是可以抛弃的。AOF很大程度上保证的数据的完整性,因为你每次有操作,都会有AOF记录。AOF是默认关闭的,开启方式是:
修改配置文件 reds.conf:appendonly yes
AOF和RDB之间的区别?
可以从上面的优缺点可以看出二者之间的区别。
Redis的事务?
一个事务从开始到执行过程会经过:
开始事务 ---- 命令入队 ----- 执行事务.
已multi 开启事务 然后命令入队 最后由exec 命令触发事务,一起执行事务中的所有的命令。
还有关于Redis的集群和基于Redis实现分布式锁的文章,会在之后的更新中讲到。如果有错误的地方和不是很详细的地方,还希望各位大佬能够在评论中指出,我们一起学习,一起进步。