缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率。
buffer与cache都数据系统的缓存
数据存储方式不同:关系型和非关系型数据库的主要差异是数据存储的方式。
扩展方式不同:SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
对事务性的支持不同
小结:
横向扩展:加服务器。(比较便宜)
纵向扩展:提高硬件配置,比如换更高性能的CPU、加CPU核数、硬盘、磁盘IO、内存条。(除硬盘外,其他需要停机才能加)
关系型数据库:特别适合高事务性要求和需要控制执行计划的任务,事务细粒度控制更好。
非关系型数据库:事务控制会稍显弱势,其价值点在于高扩展性和大数据量处理方面。
可用于应对Web2.0纯动态网站类型的三高问题。
High performance—对数据库高并发读写需求
Huge Storage—对海量数据高效存储与访问需求
High Scalability s&High Availability一对数据库高可扩展性与高可用性需求
关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系型数据库关注在关系上和对数据的一致性保障,非关系型数据库关注在存储和高效率上。 例如,在读写分离的MysQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。
关系型数据库:
非关系型数据库:
注:在Redis6.0中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,仍然是单线程处理的。
Redis | Memcached | |
---|---|---|
类型 | KV型数据库 | KV型数据库 |
过期策略 | 支持 | 支持 |
数据类型 | 五大数据类型 | 单一数据类型 |
持久化 | 支持 | 不支持 |
主从复制 | 支持 | 不支持 |
虚拟内存 | 支持 | 不支持 |
--------------------前期环境准备-----------------------
#关闭防火墙和SELINUX
systemctl stop firewalld && setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
#将Redis包上传至opt目录并解压
cd /opt
tar zxvf redis-5.0.7.tar.gz
-----------------------安装Redis----------------------
#编译安装并指定安装路径为/usr/local/redis
cd /opt/redis-5.0.7/
make -j2 && make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装。
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
一直回车即可
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#这里默认为/usr/local/bin/redis-server,需要手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入
#install_server.sh 脚本运行完毕后,Redis服务就已经启动,默认监听端口为6379
netstat -natp | grep redis
#优化文件路径,方便系统管理
ln -s /usr/local/redis/bin/* /usr/local/bin/
--------------------Redis服务管理命令------------------
/etc/init.d/redis_6379 stop #停止
/etc/init.d/redis_6379 start #启动
/etc/init.d/redis_6379 restart #重启
/etc/init.d/redis_6379 status #查看状态
--------------------配置文件参数----------------------
vim /etc/redis/6379.conf
#70行
bind 127.0.0.1 192.168.41.43 #监听的IP地址,127.0.0.1是本机的回环网卡地址,43是物理网卡地址,监听43便于远程连接
#93行
port 6379 #监听端口
#137行
daemonize yes #使用守护进程的方式启动,即后台启动
#159行
pidfile /var/run/redis_6379.pid #Redis的进程号文件·保存位置
#172行
logfile /var/log/redis_6379.log #日志保存的位置
#187行
databases 16 #监听库的数量(编号0-15)
/etc/init.d/redis_6379 restart #改完配置文件,重启redis
注:如果想要在一台主机远程连接其他主机的redis,首先
确保两台服务器的redis已安装,然后两台的配置文件中的
bind参数都监听本机物理网卡地址即可
工具 | 作用 |
---|---|
redis-server | 用于启动redis的工具 |
redis-benchmark | 用于检测redis在本机的运行效率 |
redis-check-aof | 修复AOF持久化文件 |
redis-check-rdb | 修复RDB持久化文件 |
redis-cli | redis命令行工具 |
-------------------redis数据库命令-------------------
语法:redis-cli [-h host -p port -a password]
-h:指定主机
-p:指定redis的端口号
-a:指定密码,如果没有设置密码,可以省略
redis-cli不添加任何选项表示默认登陆本机redis,默认端口
号6379
redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。
语法:redis-benchmark [选项] [选项值]
-h:指定服务器主机名
-p:指定服务器端口
-s:指定服务器socket
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET/GET值的数据大小
-k:l=keep alive 0=reconnect
-r:SET/GET/INCR使用随机key,SADD使用随机值
-P:通过管道传输<numreg>请求
-q:强制退出redis,仅显示query/sec值
--csv:以CSV格式输出
-l:生成循环,永久执行测试
-t:仅运行以逗号分隔的测试命令列表
-I:Idle模式,仅打开N个idle连接并等待
1.向IP地址为192.168.41.43(本机),端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能。
redis-benchmark -h 192.168.41.43 -p 6379 -c 100 -n 100000
或者
redis-benchmark -c 100 -n 100000
2.测试存取大小为100字节的数据包的性能
redis-benchmark -h 192.168.41.43 -p 6379 -q -d 100
3.测试本机上Redis 服务在进行set与lpush操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
命令 | 作用 |
---|---|
set | 存取数据 |
get | 存放数据 |
keys * | 查看所有的键 |
keys k? | 查看k开头后面任意一位的数据 |
exist | 判断键是否存在,1为存在,0为不存在 |
del | 删除键 |
type | 查看键对应的value值类型(五大类型) |
rename k1 k2 | 将名为k1的键改名为k2,无论k2是否存在都会成功,存在k2,k1的值会覆盖k2的值;不存在,则直接将k1改为k2,k1就不存在了 |
renamenx | 同rename作用一样,只不过如果k2存在,则不会执行,建议使用renamenx,以免重要数据被覆盖 |
dbsize | 查看当前数据库中key的数目 |
格式:set 键名 值 #存数据
get 键名 #查数据
keys * #查看当前数据库中所有键
keys k* #查看当前数据库中以k开头的键
keys k? #查看当前数据库中以k开头,后面包含任意一位字符的键
keys k?? #查看当前数据库中以k开头,后面包含任意两位字符的键
exists用于判断键是否存在,存在返回1,不存在返回0
语法:exists 键名
del用于删除键
语法:del 键名
type用于查看键存储的数据类型
语法:type 键名
rename和renamenx都用于重命名,区别在于renamenx修改的新键名存在时,不执行;而rename无论新键名存不存在,都更改
语法:rename 旧键名 新键名
renamenx 旧键名 新键名
dbsize用于查看当前数据库中key的数目
语法:dbsize
语法:config set requirepass XXXXXX
#一旦设置密码,必须先验证通过密码,否则所有操作不可用
auth XXXXXX
#验证密码
config get requirepass
#先验证,才能查看密码及其他操作,一次验证只支持本次会话,退出redis再进需要重新auth
redis-cli -a 000000
#登录时直接-a XXXXXX进行密码认证,后续操作就不需要在验证密码
config set requirepass ''
#清空密码,就是设置空字符
select用于切换redis内的数据库,默认包含16个,编号0-15,默认使用0
使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库。
各数据库相互独立,互不干扰。
语法:select 编号
各库之间移动数据
语法:move 键名 库编号
flushdb:清空当前数据库数据
flushall:清空所有数据库的数据。。。所谓的删库跑路,慎用!!!