我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
个人博客:传送阵
笔者微信:zhanghe15069028807
,非诚勿扰。
Redis
1、基本概念
基本概念
Redis是一款用于缓存的nosql数据库,用C语言写的,性能放在第一位,稳定安全放在第二位,这是与关系型数据库有区别的地方。与redis同类型的产品有memcache,这两个产品各有优缺点,我们后面会有分析。
Redis的运行比较依赖内存,通常我们在运行Redis的服务器上安装大内存,而且是集群的方式运行,一台服务器可以运行多个Redis实例,配置起来也比较简单。
下面我们使用Redis的3.2.12版本来演示,官网地址:www.redis.io 具体下载地址下载地址。
面试点
- 持久化
- 数据类型
- 缓存穿透
memcache&redis
memcache是一款比较极端的软件,追求极速,安全性和扩展性都不是太好,而且只支持键值对。
redis支持多种数据类型,持久化,自带高可用。
tair是二次开发的memcache,淘宝的缓存应用,单机跑没有优势,分布式性能非常好。
总结:
memcached:多核的缓存服务,更加适合于多用户并发访问次数较少的应用场景,适合淘宝,比如双11。
redis:单核的缓存服务,在单节点的情况下,更适合于少量用户多次访问,集群可弥补这一缺陷,redis一般都是集群跑,比如新浪微博。
2、基本操作
安装&启动&基本配置
//基本的安装启动 [root@NFS nosql]# ls redis-3.2.12.tar.gz [root@NFS nosql]# tar xzf redis-3.2.12.tar.gz [root@NFS nosql]# ls redis-3.2.12 redis-3.2.12.tar.gz [root@NFS nosql]# mv redis-3.2.12 redis [root@NFS nosql]# ls redis redis-3.2.12.tar.gz [root@NFS nosql]# cd redis [root@NFS redis]# make src/redis-server & #启动并放入后台 [root@NFS src]# vim /etc/profile [root@NFS src]# source /etc/profile [root@NFS src]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/nosql/redis/src [root@NFS src]# redis-cli 连接进入mysql 127.0.0.1:6379>
//自定义配置文件 [root@NFS ~]# mkdir /nosql/6379 [root@NFS ~]# cd /nosql/6379 [root@NFS 6379]# vim redis.conf daemonize yes #是否后台运行 port 6379 logfile /nosql/6379/redis.log dir /nosql/6379 #持久化文件存储位置 dbfilename dump.rdb #RDB持久化数据文件 //先关闭运行的redis [root@NFS 6379]# redis-cli 127.0.0.1:6379> shutdown [NOSAVE|SAVE] not connected> exit //然后应用配置文件 [root@NFS ~]# redis-server /nosql/6379/redis.conf //设置并查看键值对 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> get name "zhangsan"
安全配置
刚安装好不允许远程用户登录,只允许本地登录。redis没有用户的概念,只有密码。怎样才能让远程用户也可以使用呢?在配置文件里面加一行,如下所示:
[root@NFS ~]# cat /nosql/6379/redis.conf daemonize yes port 6379 logfile /nosql/6379/redis.log dir /nosql/6379 dbfilename dump.rdb bind 127.0.0.1 192.168.80.24 #默认就只侦听127,加上网卡的地址 //更改完配置文件之后,先停止当前REDIS,然后再加载配置文件 [root@NFS ~]# redis-cli 127.0.0.1:6379> shutdown not connected> exit [root@NFS ~]# redis-server /nosql/6379/redis.conf [root@NFS ~]# redis-cli -h 192.168.80.24 192.168.80.24:6379> set a 2 OK
//给Redis配置个密码 [root@NFS ~]# redis-cli 127.0.0.1:6379> shutdown not connected> exit [root@NFS ~]# vim /nosql/6379/redis.conf daemonize yes port 6379 logfile /nosql/6379/redis.log dir /nosql/6379 dbfilename dump.rdb bind 127.0.0.1 192.168.80.24 requirepass cba-123 #配置个密码 [root@NFS ~]# redis-server /nosql/6379/redis.conf //在命令行当中通过-a输入用户名和密码 [root@NFS ~]# redis-cli -a cba-123 127.0.0.1:6379> set b 2 OK //进入redis再输入密码也可以 [root@NFS ~]# redis-cli 127.0.0.1:6379> AUTH cba-123 OK 127.0.0.1:6379> set b 3 OK
在线配置
//在REDIS内部获取配置文件的路径 127.0.0.1:6379> CONFIG GET dir 1) "dir" 2) "/nosql/6379" //在redis内部查看绑定了哪个地址 127.0.0.1:6379> CONFIG GET bind 1) "bind" 2) "127.0.0.1 192.168.80.24" //在redis内部获取所有的配置文件的内容 127.0.0.1:6379> CONFIG GET * 所有 //在线修改密码 127.0.0.1:6379> CONFIG SET requirepass abc-123 OK #立即生效、临时生效、重启失效
3、持久化
持久化是Redis的核心功能之一,是比memcache强大的地方,本来以为Redis的持久化是一种了不起的功能,原来Redis所谓的持久化就是将内存中的内容下刷到硬盘上,缓存产品的运行都是非常依赖内存的,因为只有数据在内存当中才能高效的响应,默认Redis的持久化是关闭的,默认所有的数据都不会保存到磁盘当中。
Redis的持久化分为两类:RDB和AOF。
RDB
RDB的持久化就是将内存当中的数据通过快照的方式下刷到硬盘当中,这种方式速度比较快,适合做备份,但是做快照的时候并不会对内存中的内容加锁,所以有可能会导致部分数据在做快照时没有被照上。另外,有一点值得注意,就是Redis的主从复制也是基于RDB的方式。
RDB的触发又分为手工和自动两种方式。
手工就是在Redis内部敲一个命令“save”,通知Redis将内存中的内容下刷到硬盘上,那么下刷到什么地方了呢?我们在配置文件当中有一个dbfilename dump.rdb
文件,就是下刷到这个文件里面了。
自动就是我们在配置文件当中设置一个触发条件,满足条件条件之后就会自动下刷到硬盘上,下面演示的是官方给的条件,比如宽松,我们可以自己定义一些严格的,但是注意,如果下刷的太频繁,一定会影响到Redis的性能的,而且违背了Redis设计的初衷。
[root@NFS ~]# cat /nosql/6379/redis.conf daemonize yes port 6379 logfile /nosql/6379/redis.log dir /nosql/6379 dbfilename dump.rdb bind 127.0.0.1 192.168.80.24 requirepass cba-123 save 900 1 save 300 10 save 60 10000
触发条件解释:
900(15分钟)秒之内有一个更改就做一次save
300(5分钟)秒之内有10个更更改
60秒内有100000个更改
AOF
AOF(apped only log file)只追加日志文件
AOF持久化会记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据。
优点:最大程度保证数据不丢,类似mysql的binlog日志
缺点:日志记录量比较大
AOF的触发条件在三种(我们选择一种即可):
1、appendfsync always #触发条件,每个写操作都要写入到磁盘
2、appendfsync everysec #每秒一次,可能会丢(常用)
3、appendfsync no #默认是on,没有触发条件,交给操作系统去判断,不能用
[root@NFS ~]# cat /nosql/6379/redis.conf daemonize yes port 6379 logfile /nosql/6379/redis.log dir /nosql/6379 dbfilename dump.rdb bind 127.0.0.1 192.168.80.24 requirepass cba-123 appendonly yes #开启aof持久化功能 appendfsync everysec
区别
我们在redis如果多次给一个键赋予不同的值,那么就会覆盖上一次的值,如下所示:
set name zhanghe set name zhangjia
RDB只会只留最后一次赋值,即name等于zhangjia
而AOF会把所有的过程都保留下来,先执行set name zhanghe
,再执行
set name zhangjia
,所以我们说AOF的的记录量是比较大的,而且AOF触发条件更精细,可达到每做一次操作都做一次持久化。
来源:https://www.cnblogs.com/yizhangheka/p/12159900.html