赞
踩
就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
包括:Oracle(支持容器化)、MySQL(主流) 、SQL Server(微软开发)、Microsoft Access(微软第一代数据库)、DB2(标准SQL语言)、SYDB(SYbase)、PostgreSQL(新流)等
NoSQL (NoSQL=Not Only SQL), 意思是“不仅仅是SQL",是非关系型数据库的总称。
除了主流的关系型数据库外的数据库,都认为是非关系型。
主流的NoSQL数据库有 Redis 、MongBD(开源数据库C++)、Hbase、Memcached等。
High performance——对数据库高并发读写需求
Huge Storage——对海量数据高效存储与访问需求
High Scalability && High Availability——对数据库高可扩展性与高可用性需求
关系型: 依赖于关系模型E-R图,同时以表格式的方式存储数据
非关系型: 除了以表格形式存储之外,通常会以大块的形式组合在一一起进行存储数据
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。 虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点) 来分担负载。
关系: 纵向(天然表格式)
非关: 横向(天然分布式)
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是最佳选择。SQL数据库支持对事务原子性(不可再分割,要么发生要么不发生)细粒度控制,并且易于回滚事务。虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
关系型: 特别适合高事务性要求和需要控制执行计划的任务
非关系: 此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面
内存中的缓存
可用于应对 web2.0 纯动态网站类型的三高问题
(1)High performance-----对数据库高并发读写要求
(2)Huge Storage-----对海量数据高效存储与访问需求
(3)High Scalability && High Availability -----对数据库高扩展性与高可用性需求
关系型数据库关注在关系上:
1.安全性高(持久化)
2.事务处理能力强
3.任务控制能力强
4.可以做日志备份、恢复、容灾能力更强一点
非关系型数据库关注在缓存(存储)上:
1.数据保存在缓存中,利于读取速度/查询数据
2.架构中位置灵活
3.分布式、扩展性高
关系型数据库: 实例->数据库->表(table)->记录行(row)、数据字段(column)
非关系型数据库: 实例->数据库->集合(collection)–>键值对(key-value) 非关系型数据库不需要手动建数据库和集合(表)。
官方网址:Redis
① 若在服务器上只运行一个Redis进程, 当多个客户端同时访问时, 服务器的处理能力是会有一定程度的下降;
② 若在同一台服务器上开启 多个Redis进程, Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。 即在实际生产环境中, 需要根据实际的需求来决定开启多少个Redis进程。 (一般建议开启2个,用作备份和抗高并发)
具有极高的数据读写速度: 数据读取的速度最高可达到110000次/s,数据写入速度最高可达到81000次/s。
支持丰富的数据类型: 支持key-value、 Strings、Lists、Hashes ( 散列值)、Sets及OrderedSets等数据类型操作。
pS : string 字符串(可以为整形、浮点和字符型,统称为元素)
list列表:(实现队列,元素不唯一,先入先出原则)
set 集合:(各不相同的元素) hash
hash散列值:( hash的key必须是唯一的) set /ordered sets集合/有序集合
支持数据的持久化: 可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
原子性: Redis所有 操作都是原子性的。
支持数据备份: 即master-salve 模式的数据备份。
Redis作为基于内存运行的数据库,缓存是其最长应用的场景之一。除此之外,Redis常见的
应用场景还包括获取最新的N个数据的操作、排行榜应用、计数器应用、存储关系、实时分析系统、日志记录等。
Redis 6.0版本前一直是单线程方式处理用户的请求(注:Redis 6.0中新增加的多线程也只是针对处理网络请求过程采用了多线性,数据的读写命令,仍然是单线程处理)
单线程为何如此快?
1.纯内存(避免了磁盘I/O等耗时操作)
2.非阻塞
3.避免线程切换和竞态消耗
Redis为何那么快?
1.Redis是一款出内存结构,避免了磁盘I/O等耗时操作
2.Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗
3.采用了I/O多路复用机制,大大提升了并发效率
支持数据的持久化: 可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用
支持更多的数据类型: 支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zset(有序集合)
支持数据的备份: 可以实现类似于数据的master-slave模式的数据备份,另外也支持使用快照+AOF
支持更大的value数据: memcache单个key value最大只支持1MB,而redis最大支持512MB(生产不建议超过2M,性能受影响)
在Redis6版本前,Redis 是单线程,而memcached是多线程,所以单机情况下没有memcached 并发高,性能更好,但redis 支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发
支持集群横向扩展: 基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性
都是基于 C 语言开发
memcached | redis | |
---|---|---|
类型 | key-value | key-value |
过期策略 | 支持 | 支持 |
数据类型 | 单一数据类型 | 五大数据类型 |
持久化 | 不支持 | 支持 |
主从复制 | 不支持 | 支持 |
虚拟内存 | 不支持 | 支持 |
1)# 关闭防火墙和SElinux systemctl stop firewalld systemctl disable firewalld setenforce 0 2)#安装gcc gcc-c++ 编译器 yum install -y gcc gcc-c++ make 3)#切换至/opt目录,把下载好的安装包上传进来并解压 cd /opt/ tar zxvf redis-5.0.7.tar.gz 4)#进入目录然后编译安装 cd /opt/redis-5.0.7/ make make PREFIX=/usr/local/redis install #由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装 5)#执行install_server.sh脚本 cd /opt/redis-5.0.7/utils ./install_server.sh #一路回车,指导让你输入路径这一步 #路径需要手动输入 Please select the redis executable path [] /usr/local/redis/bin/ redis-server Selected config: Port : 6379 #默认侦听端口为6379 Config file : /etc/redis/6379.conf #配置文件路径 Log file : /var/log/redis_6379.log #日志文件路径 Data dir : /var/lib/ redis/6379 #数据文件路径 Executable : /usr/local/redis/bin/redis-server #可执行文件路径 Cli Executable : /usr/local/redis/bin/redis-cli #客户端命令工具 6)#优化路径并查端口是否打开 #把redis的可执行程序文件放入路径环境变量的目录中便于系统识别 ln -s /usr/local/redis/bin/* /usr/local/bin/ #当install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认侦听端口为6379 netstat -natp | grep redis 7)#修改配置文件 vim /etc/redis/6379.conf bind 127.0.0.1 192.168.61.11 #70行,添加监听的主机地址 port 6379 #93行,Redis默认的监听端口 daemonize yes #137行,启用守护进程 pidfile /var/run/redis_6379.pid #159行,指定PID文件 loglevel notice #167行,日志级别 logfile /var/log/redis_6379.log #172行,指定日志文 8) #重启redis查看监听的地址 /etc/init.d/redis_6379 restart #重启 ss -antp|grep redis 9)##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 #状态
1)# 关闭防火墙和SElinux
2)#安装gcc gcc-c++ 编译器
3)#切换至/opt目录,把下载好的安装包上传进来并解压
4)#进入目录然后编译安装
5)#执行install_server.sh脚本
6)#优化路径并查端口是否打开
7)#修改配置文件
8) #重启redis查看监听的地址
安装部署就完成啦!
rdb 和 aof 是dedis服务中持久化功能的两中形式
redis-cli 常用于登录至redis数据库
Redis命令工具 | 功能 |
---|---|
redis-server | 用于启动Redis的工具 |
redis-benchmark | 用于检测Redis在本机运行的性能 |
redis-check-aof | 修复AOF持久化文件 |
redis-check-rdb | 修复RDB持久化文件 |
redis-cli | Redis命令行工具 |
redis-cli -h host -p port -a password
-h 指定远程主机
-p 指定 Redis 服务的端口号
-a 指定密码,未设置数据库密码可以省略-a 选项
-n 指定进入库的序列号
若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的Redis数据库
#实例
redis-cli -h 192.168.61.11 -p 6379
Redis -benchmark是官方自带的redis性能测试工具,可以有效的测试redis服务的性能。
#基本的测试语法
redis-benchmark [选项] [选项值]
选项 | 作用 |
---|---|
-h | 指定服务器主机名 |
-p | 指定服务器端口 |
-s | 指定服务器socket(套接字) |
-c | 指定并发连接数 |
-n | 指定请求数 |
-d | 以字节形式指定SET/GET值的数据大小 |
-k | 1=keep alive(长连接), 0=reconnect |
-r | SET/GET/INCR 使用随机 key, SADD 使用随机值。 |
-P | 通过管道传输请求 |
-q | 强制退出redis,仅显示query/sec值 |
-csv | 以CSV格式输出 |
-l | 生成循环,永久执行测试。 |
-t | 仅运行以逗号分隔的测试命令列表。 |
-I | Idle 模式:仅打开 N 个 idle 连接并等待 |
示例一:向IP为192.168.61.11、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
redis-benchmark -h 192.168.61.11 -p 6379 -c 100 -n 100000
示例二:测试存取大小为100字节的数据包性能
redis-benchmark -h 192.168.61.11 -p 6379 -q -d 100
示例三:测试本机上Redis服务在进行set与lpush操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key
keys: 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
exists:命令可以判断键值是否存在。
del:命令可以删除当前数据库的指定 key。
type:命令可以获取 key 对应的 value 值类型。
命令(红色为命令) | 解释 |
---|---|
set | 存放数据 |
get | 获取数据 |
keys s * | 获取所有的key |
keys s* | 以s开头的数据 |
keys s? | 以s开头后面包含任意一位的数据 |
exist kiro | 判断kiro是否存在(存在:1;不存在:0) |
del key | 删除当前的数据库key |
type key | 获取key对应的value值 |
rename key1 key2 | 将key1修改为key2 |
renamenx key1 key2 | 将key1修改为key2之前判断key2是否存在,不存在则重命名 |
dbsize | 查看当前数据库中key的数目 |
#设置密码 config set requirepass your password #查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用) auth 密码 config get requirepass #删除密码 auth 密码 config set requirepass '' 以上不设置,无法重启redis exit 退出 例: config set requirepass 123456 auth 123456 config set requirepass auth 123456 config get requirepass ''
Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。
多数据库相互独立,互不干扰。
#多数据库间切换
格式:select 序号
使用 redis-cli 连接 Redis 数据库后,默认使用的是序号为 0 的数据库。
127.0.0.1:6379> select 10 #切换至序号为 10 的数据库
127.0.0.1:6379[10]> select 15 #切换至序号为 15 的数据库
127.0.0.1:6379[15]> select 17 #切换至序号为 17 的数据库
#多数据库间移动数据
格式:move 键值 序号
FLUSHDB:清空当前数据库数据
FLUSHALL:清空所有数据库的数据,慎用!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。