缓存简介
回源越大越不好。
CDN 主要优势
提前对静态内容进行预缓存,避免大量的请求 回源,导致主站网络带宽被打满而导致数据无法更新,
另外 CDN 可以将数据根据访问的热度不同而进行不同级别的缓存,例如访问量最高的资源访问 CDN
边缘节点的内存,其次的放在 SSD 或者 SATA,再其次的放在云存储,这样兼顾了速度与成本。缓存到最快的地方如内存,缓存的数据准确命中率高,访问速度就快调度准确-将用户调度到最近的边缘节点性能优化-CDN专门用于缓存响应速度快安全相关-抵御攻击节省带宽:由于用户请求由边缘节点响应,因此大幅降低到源站带宽。
Redis 简介
redis 是一个开源的、遵循 BSD 协议(意思是"伯克利软件发行版"。显然,BSD这个名称并不是我们现在所理解的操作系统,而且其原意也并非简单的操作系统,而是一整套软件发行版的统称)的、基于内存的而且目前比较流行的键值数据库(key-value
database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能
的还有 memcache,但相比 memcache,redis 还提供了易扩展、高性能、具备数据持久性等功能。
Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛
tips 五大开源许可协议分别是GPL,LGPL,BSD,MIT,Apache。
大多数情况下做缓存,做消息队列,订阅发布存在。
大多数情况下我们会进行两个软件之间的对比
与memcached对比
- 支持数据的持久化:可以将内存中的数据保持在磁盘中,重启 redis 服务或者服务器之后可以从备份文件中恢复数据到内存继续使用。
- 支持更多的数据类型:支持 string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合)
- 支持数据的备份:可以实现类似于数据的 master-slave 模式的数据备份,另外也支持使用快照+AOF。
- 支持更大的 value 数据:memcache 单个 key value 最大只支持 1MB,而 redis 最大支持 512MB。
- Redis 是单线程,而 memcache 是多线程,所以单机情况下没有 memcache 并发高,但 redis 支持分布式集群以实现更高的并发,单 Redis 实例可以实现数万并发。
- 支持集群横向扩展:基于 redis cluster 的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。
- 都是基于 C 语言开发。
安装
由于yum安装过于简单,所以在此不做说明。直接编译安装。
官方下载地址:http://download.redis.io/releases/
#环境准备
[root@Centos7 ~]#yum remove firewalld -y
[root@Centos7 ~]#yum install epel-release gcc make wget -y
[root@Centos7 ~]#wget http://download.redis.io/releases/redis-4.0.14.tar.gz
[root@Centos7 ~]#tar xf redis-4.0.14.tar.gz
[root@Centos7 ~]#cd redis-4.0.14
[root@Centos7 redis-4.0.14]# make PREFIX=/apps/redis install
[root@Centos7 redis-4.0.14]# mkdir -pv /apps/redis/{etc,log}
[root@Centos7 redis-4.0.14]#cp redis.conf /apps/redis/etc/
#apps/redis/bin/redis-server /apps/redis/etc/redis.conf 不建议这样启动
[root@Centos7 redis-4.0.14]#sed -i 's@logfile ""@logfile "/apps/redis/log/redis.log"@' /apps/redis/etc/redis.conf
[root@localhost ~]# vim /usr/lib/systemd/system/redis.service #启动文件手动编辑
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
[root@Centos7 ~]# groupadd -g 6379 redis && useradd -u 6379 -g 6379 redis -s /sbin/nologin
[root@Centos7 ~]# systemctl daemon-reload
[root@Centos7 ~]# chown -R redis.redis /apps/redis
[root@Centos7 ~]# systemctl start redis
[root@Centos7 ~]# cat /apps/redis/log/redis.log #查看日志。
#配置环境变量
[root@localhost ~]# vim /etc/profile.d/redis.sh
#!/bin/bash
export PATH=/apps/redis/bin:$PATH
[root@localhost ~]#source /etc/profile.d/redis.sh
[root@localhost ~]#redis-cli #测试
[root@Centos7 ~]#ln -sv /apps/redis/bin/redis-* /usr/local/
#强制结束 kill -9 `ps -ef | grep /apps/redis/bin/redis-server | head -1 |tr -s " "|cut -d " " -f2`
上面安装完之后会报出警报,此时我们只修改下面的选项就够了。
[root@Centos7 ~]# vim /etc/sysctl.conf
net.core.somaxconn = 512
vm.overcommit_memory = 1
[root@Centos7 ~]# sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#开机自启
[root@Centos7 ~]#echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
[root@Centos7 ~]#chmod +x /etc/rc.local
两种模式
持久化可以手动执行,也可以按照服务器的配置定期执行。
1)save和bgsave命令:(手动用于生成RDB文件的命令)
save:会阻塞redis服务器进程,直到创建RDB文件完毕为止;(在此期间进程不能处理任何请求)
bgsave:fork一个子进程来创建RDB文件,父进程可以继续处理命令请求;
2)自动执行:
redis服务器允许用户通过设置配置文件save选项,让服务器每隔一段时间自动执行一次bgsave命令。如下:配置文件中的save选项
save 900 1
save 300 10
save 60 10000
持久化可以手动执行,也可以按照服务器的配置定期执行。
1)save和bgsave命令:(手动用于生成RDB文件的命令)
save:会阻塞redis服务器进程,直到创建RDB文件完毕为止;(在此期间进程不能处理任何请求)
bgsave:fork一个子进程来创建RDB文件,父进程可以继续处理命令请求;
2)自动执行:
redis服务器允许用户通过设置配置文件save选项,让服务器每隔一段时间自动执行一次bgsave命令。如下:配置文件中的save选项
save 900 1
save 300 10
save 60 10000
RDB:基于时间的快照,只保留当前最新的一次快照,特点是执行速度比较快,缺点是可能会丢失从上次快照到当前时间点之间未做快照的数据。
AOF:按照操作顺序依次将操作添加到指定的日志文件当中,特点是数据安全性相对较高,缺点是即使有些操作是重复的也会全部记录。