(1)结构化数据库,创建在关系模型基础上,面向记录
大致包括:oracle、mysql、SQL server、DB2(大数据常用)、Microsoft access
除了主流的关系型数据库外的数据库,都认为是非关系型
大致包括:redis、mongdb、hbase、couhdb
(1)对数据库高并发读写需求
(2)对海量数据高效存储与访问需求
(3)对数据库高可扩展性与高可用性需求
redis是基于内存运行并支持持久化,采用key-value(键值对)的存储形式
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
tar zxvf /opt/redis-5.0.7.tar.gz
yum install -y gcc gcc-c++
cd /opt/redis-5.0.7
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin
cd /opt/redis-5.0.7/utils
./install_server.sh
#####一直回车########
Selected config:
Port : 6379 端口号
Config file : /etc/redis/6379.conf 配置文件
Log file : /var/log/redis_6379.log 日志文件
Data dir : /var/lib/redis/6379 数据文件
Executable : /usr/local/bin/redis-server 执行文件
Cli Executable : /usr/local/bin/redis-cli 客户端执行文件
######查看配置文件##########
vim /etc/redis/6379.conf
70:bind 127.0.0.1 监听的主机地址
89:protected-mode yes
93:port 6379 端口
102:tcp-backlog 511
114:timeout 0
131:tcp-keepalive 300
137:daemonize yes 启用守护进程
148:supervised no
159:pidfile /var/run/redis_6379.pid 指定PID文件
167:loglevel notice 日志级别
172:logfile /var/log/redis_6379.log 指定日志文件
/etc/init.d/redis_6379 status|stop|start|restart
/etc/init.d/redis_6379 status
Redis is running (5942)
netstat -lntup | grep redis
redis-cli [-h 192.168.60.30 -p 6379] 进入数据库
keys * 查看所有数据库,可以使用通配符【?表示单个字符,*表示所有字符】
set 键值对 值 设置数据变量和值
get 键值对 值 查询数据变量和值
exists 判断键值对是否存在
del 删除当前数据库的指定key
type 获取key对应的value值类型
rename(覆盖)/rename(不覆盖) 对已有的key进行重命名
dbsize 查看当前数据库中key的数目
select 3 创建数据库3
move 键值对 目标数据库
-h 指定服务器主机名
-p 指定服务器端口
-c 指定并发连接数
-n 指定请求数
-d 以字节的形式指定set/get值得数据大小
-q 强制退出redis,仅显示query/sec值
redis-benchmark -h 192.168.60.30 -p 6379 -c 100 -n 10000
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储2^32-1键值对(40多亿)。
格式为:hset 类名 键值对 值
主要命令为:
redis是运行在内存中,内存中的数据断电丢失,为了能够重用redis数据,或者防止系统故障,需要将redis中的数据写入到磁盘空间中,即持久化
RDB方式:创建快照的方式获取某一时刻redis中所有数据的副本
AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
再生产环境中一般使用两者结合的方式,使用RDB方式快照,然后在断点的部分使用AOF方式回复。
默认文件名dump.rdb
在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
执行save或者是bgsave(异步)命令
执行flushall命令,清空数据库所有数据
执行shutdown命令,保证服务器正常关闭且不丢失任何数据
适合大规模的数据恢复,如果业务对数据完整性和一直性要求不高,RDB是很好的选择
数据的完整性和一致性不高
备份时占用内存
vim /etc/redis/6379.conf
219:save 900 1 900
220:save 300 10
221:save 60 10000
理想情况下,“used_memory_rss”的值应该比“used_memory”略微高一点。
如果Redis实例的内存使用率超过最大可用内存,即“used_memory”>最大可用内存,那么操作系统会将内存与Swap空间交换,把内存中旧的或不再使用的内容写入硬盘上的Swap分区,以便留出新的物理内存给新页或活动页(page)使用。
通过查看“used_memory”指标可知道Redis的内存情况,当“used_memory”>最大可用内存时,Redis实例正在进行内存交换或者已经内存交换完毕。如果Redis进程上发生内存交换,那么Redis及使用Redis数据的应用性能都会受到严重影响。
Redis之所以这么流行的主要原因之一就是低延迟特性带来的高性能,所以说解决延迟问题是提高Redis性能最直接的办法。
以1G带宽来说,若是延迟时间远高于200μs,那明显是出现了性能问题。Redis是单核执行所有客户端的请求的, 即使在服务器上会有一些慢的IO操作,这些请求也都是按序排队等待执行的。
内存碎片是由操作系统低效的分配除回收物理内存得到的。如内存碎片率超过1.5,可能是操作系统或Redis实例中内存管理变差的表现。
①根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
②若业务场景不需要数据持久化,关闭持久化方式用以提高处理性能及内存使用率。
③不要让你的Redis所在机器物理内存使用超过实际内存总量的60%。
④默认情况下,尽量不要让Redis实例的客户端连接数超出5000
tar zxvf redis-5.0.7.tar.gz
yum install -y gcc gcc-c++
cd /opt/redis-5.0.7
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin
cd /opt/redis-5.0.7/utils
./install_server.sh
vim /etc/redis/6379.conf
70 #bind 127.0.0.1
89 protected-mode no
93 port 6379
137 daemonize yes
700:appendonly yes
833:cluster-enabled yes
834:
841:cluster-config-file nodes-6379.conf
842:
847:cluster-node-timeout 15000
/etc/init.d/redis_6379 restart
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
rvm list known //查看ruby的版本信息
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
... ... ...
sh rvm-installer.sh //生成rvm.sh脚本
source /etc/profile.d/rvm.sh //全局声明
rvm install 2.4.10 //安装
rvm use 2.4.10 //使用
gem install redis //使用ruby编译安装redis
systemctl stop firewalld
setenforce 0
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
yes 回车
(1)在master服务器上写入数据
redis-cli -c -h 192.168.60.10
set name zhangsan
get name
(2)在slave服务器上面能够同步数据
redis-cli -c -h 192.168.60.30
get name
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
分析:无法连接说明端口的问题,在四层之上网络中都是跑的端口号,如下图,查看端口信息是因为节点服务端口没有生效
netstat -lnutp | grep 6379
vim /etc/redis/6379.conf
bind 192.168.60.10 192.168.60.16 192.168.60.15
/etc/init.d/redis_6379 restart
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
get name
分析:宕机之后恢复无法找回数据,根据提示信息说明群集处于down状态,检查之后master没有任何问题,检查端口号都是没有任何的问题,那就说明此前创建的群集失效,所以需要重新启动群集
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
重新启动群集出现错误是数据库中的群集数据没有同步,无法重新重启群集。说明在群集数据文件中会存在以前同步的数据。
cd /var/lib/redis/6379/
mv ./* /opt/6379
rm -rf ./*
/etc/init.d/redis_6379 restart
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1