百姓网网站建设,资源搜索神器,如何做网站的自由撰稿人,上海网络推广的方法目录
关系型数据库与非关系型数据库
关系型数据库
非关系型数据库
非关系型数据库存在的原因
Redis
概念
优点
Redis部署流程
初步设置
安装
初始化
初始化时指定的参数说明
Redis配置文件
修改监听地址
Redis远程连接
远程连接
测试服务端状态
redis-benchm…目录
关系型数据库与非关系型数据库
关系型数据库
非关系型数据库
非关系型数据库存在的原因
Redis
概念
优点
Redis部署流程
初步设置
安装
初始化
初始化时指定的参数说明
Redis配置文件
修改监听地址
Redis远程连接
远程连接
测试服务端状态
redis-benchmark测试工具
测试请求性能
测试读写性能
set 与 lpush 操作性能
Redis常用命令
创建键值对
get
keys
exists
del
type
rename
renamenx
dbsize
数据库操作
多数据库间切换
多数据库间移动数据
清除数据库内数据
Redis持久化
概念
分类
RDB
AOF
二者选择的标准
Redis 持久化配置
RDB
AOF
AOF重写
性能管理
回收策略 关系型数据库与非关系型数据库
关系型数据库
一个结构化的数据库创建在关系模型基础上一般面向于记录比如Oracle、MySQL、SQL Server、Microsoft Access、DB2等等基于硬盘
非关系型数据库
除了主流的关系型数据库外的数据库都认为是非关系型数据库比如Redis、MongoDB、Hbase、CouhDB等等定义键值对通过调用键去获取值基于内存基于C/S架构
非关系型数据库存在的原因
High Performance对数据库高并发读写的需求High Storage对海量数据高效存储与访问的需求High Scalability High Availability对数据库高扩展性与高可用性的需求
Redis 概念
Redis是基于内存运行的并且支持持久化采用Key-Value键值对的存储形式
优点
具有极高的数据读写速度支持数据的持久化持续存储数据支持数据备份原子性 Redis部署流程
初步设置
打开两台虚拟机并连接上XShell然后开启会话同步再将redis的源码包导入该主机 101主机作为服务端102主机作为客户端 为了方便实验关闭防火墙和内核安全机制然后安装redis所需的依赖环境
[rootlocalhost ~]# systemctl stop firewalld
[rootlocalhost ~]# setenforce 0
[rootlocalhost ~]# yum -y install gcc* zlib-devel
安装
解压该源码包进入解压目录安装创建软链接优化命令路径
[rootlocalhost ~]# tar zxvf redis-4.0.9.tar.gz
[rootlocalhost ~]# cd redis-4.0.9
[rootlocalhost redis-4.0.9]# make
[rootlocalhost redis-4.0.9]# make PREFIX/usr/local/redis install
[rootlocalhost redis-4.0.9]# ln -s /usr/local/redis/bin/* /usr/local/bin/
初始化
由于是使用源码包安装的Redis在没经过初始化之前是不能使用的所以这里先初始化redis
还是解压目录下进入utils目录下运行install_server.sh初始化脚本进行初始化
这个脚本会让你指定一些信息全部回车用默认的就行最后使用netstat命令可以看到redis已经在运行了监听的IP是127.0.0.1 如果要在同一台主机上部署多个Redis实例那么在初始化时指定的信息都要改变 实例运行在内存上的一个进程 [rootlocalhost redis-4.0.9]# cd utils/
[rootlocalhost utils]# ./install_server.sh
[rootlocalhost utils]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4893/redis-server 1
初始化时指定的参数说明
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 # 客户端命令行工具
此时关闭会话同步
Redis配置文件
在101服务端操作
修改监听地址
在安装完redis后通过netstat命令可以看到redis目前监听的IP是127.0.0.1也就是本地的IP这样是无法远程管理redis的所以我们这里修改一下redis监听的IP地址需要修改redis的配置文件 在第70行的参数末尾添加本机的IP地址
[rootlocalhost ~]# vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.101
除此之外在第93行还可以自定义端口号第137行可以指定守护进程的开启和关闭
第159行指定PID文件第167行指定日志级别第172行指定日志文件 cd进入存放服务文件的目录下可以看到redis在安装时已经帮我们把服务脚本放到该目录下了
可以运行该脚本并且追加参数restart来重启redis然后使用netstat命令可以查看到redis目前有了两个进程其中就有监听本机IP的进程
[rootlocalhost ~]# cd /etc/init.d/
[rootlocalhost init.d]# ls
redis_6379
[rootlocalhost init.d]# ./redis_6379 restart
[rootlocalhost init.d]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4919/redis-server 1
tcp 0 0 192.168.10.101:6379 0.0.0.0:* LISTEN 4919/redis-server 1 Redis远程连接
远程连接
在101服务端操作
在安装了redis的服务端之后也同时安装了客户端。而redis不仅可以用客户端来远程连接也可以在本地连接本地的服务端
[rootlocalhost ~]# redis-cli
[rootlocalhost ~]# redis-cli -h 192.168.10.101 -p 6379
127.0.0.1:6379
127.0.0.1:6379 quit
在102客户端操作
也可以指定IP地址来远程连接
[rootlocalhost ~]# redis-cli -h 192.168.10.101 -p 6379
测试服务端状态
在102客户端操作
redis服务端通过乒乓机制来应答客户端的ping测试
[rootlocalhost ~]# redis-cli -h 192.168.10.101 -p 6379
127.0.0.1:6379 ping
PONG redis-benchmark测试工具
在101服务端操作
测试请求性能
-h指定服务器主机名-p指定服务器端口-c指定并发连接数-n指定请求数
[rootlocalhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000
99.64% 1 milliseconds # 百分之99.94的请求小于1毫秒
100.00% 1 milliseconds
80971.66 requests per second # 每秒能够接收这么多请求
测试读写性能
-d以字节的形式指定 SET/GET 值的数据大小-q强制退出 redis。仅显示 query/sec 值
[rootlocalhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100
SET: 86058.52 requests per second # 每秒
GET: 85470.09 requests per second
set 与 lpush 操作性能
-t仅运行以逗号分隔的测试命令列表
[rootlocalhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -t set,lpush -n 100000 -q
SET: 86281.27 requests per second
LPUSH: 87183.96 requests per second Redis常用命令
创建键值对
使用set指令指定键然后输入值
127.0.0.1:6379 set k1 1
OK
127.0.0.1:6379 set num1 11
OK
127.0.0.1:6379 set num2 22
OK
127.0.0.1:6379 set num3 33
OK
get
使用get指令根据键Key获取值Value
127.0.0.1:6379 get k1
1 keys
使用keys *命令查询所有键
127.0.0.1:6379 keys *
1) num2
2) counter:__rand_int__
3) num3
4) num1
5) k1
6) key:__rand_int__
7) myset:__rand_int__
8) mylist
查看当前数据库中以num开头的键
127.0.0.1:6379 keys num*
1) num2
2) num3
3) num1
查看当前数据库中以n开头后面包含任意3位字符的键
127.0.0.1:6379 keys n???
1) num2
2) num3
3) num1 exists
使用exists命令查询指定键是否存在1表示该键存在0表示该键不存在
127.0.0.1:6379 exists num1
(integer) 1
127.0.0.1:6379 exists num10
(integer) 0 del
del 命令可以删除当前数据库的指定 key
显示1表示操作成功显示0表示操作失败
127.0.0.1:6379 del num3
(integer) 1
127.0.0.1:6379 del num3
(integer) 0 type
使用 type 命令可以获取 key 对应的 value 值类型
127.0.0.1:6379type num1
string rename
rename 命令是对已有 key 进行重命名
在实际使用过程中建议先用 exists 命令查看目标 key 是否存在然后再决定是否执行 rename 命令以避免覆盖重要数据
127.0.0.1:6379keys num*
1) num1
2) num2
127.0.0.1:6379rename num2 num3
OK
127.0.0.1:6379keys num*
1) num1
2) num3 renamenx
renamenx 命令的作用是对已有 key 进行重命名并检测新名是否存在。
使用renamenx 命令进行重命名时如果目标 key 存在则不进行重命名。
127.0.0.1:6379keys *
(1) num1
127.0.0.1:6379get num1
11
127.0.0.1:6379renamenx num1 num2
(integer) 0
127.0.0.1:6379keys *
(1) num1
127.0.0.1:6379get num1
11 dbsize
dbsize 命令的作用是查看当前数据库中 key 的数目。
127.0.0.1:6379 dbsize
(integer) 5 数据库操作
多数据库间切换
redis数据库时提供了16个数据库
使用select 10就进入到第10个数据库了
127.0.0.1:6379select 10
OK
多数据库间移动数据
Redis 的多数据库在一定程度上是相对独立的例如在数据库 0 上面存放 num1 的数据在其它 1-15 的数据库上是无法查看到的
127.0.0.1:6379move num1 1 # 将当前数据库中的num1移动到数据库1中
(integer) 1
127.0.0.1:6379select 1 # 切换至目标数据库 1
OK
127.0.0.1:6379[1]get k1 # 查看被移动数据
11
清除数据库内数据
清空当前数据库数据使用 FLUSHDB
命令实现清空所有数据库的数据使用 FLUSHALL 命令实现
127.0.0.1:6379 flushdb
OK
127.0.0.1:6379 flushall
OK Redis持久化
概念
Redis是运行中内存中内存中的数据断电丢失为了能够重用Redis数据或者防止系统故障需要将Redis中的数据写入到磁盘中也就是持久化
分类
RDB方式创建快照的方式获取某一时刻Redis中所有数据的副本默认使用RDB进行持久化AOF方式将执行的写命令写到文件的末尾以日志的方式来记录数据的变化
对于静态数据的持久化叫做备份对于动态数据的持久化叫做快照
RDB
Redis的默认持久化方式默认文件名为dump.rdb触发条件有手动触发和自动触发Redis加载RDB恢复数据远远快于AOF方式
AOF
Redis默认不开启弥补RDB的不足数据的不一致性采用日志的形式来记录每个写入操作并追加到文件中Redis重启后会根据日志文件的内容将写入操作从前到后执行一次以完成数据的恢复工作
如果同时开启RDB和AOF功能Redis重启后会先读取RDB的快照文件然后再读取日志的信息进行操作也就是RDB的数据被AOF的数据覆盖了
二者选择的标准
牺牲一些性能换取更高的缓存一致性AOF
写操作频繁的时候不启用备份来换取更高的性能待手动运行 save 的时候再做备份RDB Redis 持久化配置
RDB
打开在redis的配置文件可以定义RDB持久化的设置
在219行到221行定义了
[rootlocalhost ~]# vim /etc/redis/6379.conf
save 900 1 # 在900秒(15分钟)之后如果至少有1个key发生变化则生成快照
save 300 10 # 在300秒(5分钟)之后如果至少有 10 个key发生变化则生成快照
save 60 10000 # 在60秒(1分钟)之后如果至少有10000个key 发生变化则生成快照
在第254行可以定义快照文件的文件名
dbfilename dump.rdb
第264行可以定义RDB生存文件的路径
dir /var/lib/redis/6379
第242行定义是否进行压缩
rdbcompression yes AOF
第673行修改AOF是开启还是关闭这里我们开启
appendonly yes
第677行指定了AOF生成的文件名
appendfilename appendonly.aof
在702 ~ 704行指定了AOF持久化的方式
# appendfsync always # 同步持久化每次发送数据变化会立刻写入硬盘
appendfsync everysec # 默认值每秒异步记录一次
# appendfsync no # 不同步 AOF重写
为了解决 AOF 文件体积不断增大的问题用户可以向 Redis 发送 BGREWRITEAOF命令。BGREWRITEAOF 命令会通过移除 AOF 文件中的冗余命令来重写rewriteAOF文件使 AOF 文件的体积尽可能地变小。
[rootlocalhost ~]# redis-cli
127.0.0.1:6379 bgrewriteaof
Background append only file rewriting started 性能管理
查看内存信息
127.0.0.1:6379 info memory
回收策略
设置key的过期时间这里设置过期时间为5秒。5秒后该键对应的值就为空
127.0.0.1:6379 set test 123
OK
127.0.0.1:6379 expire test 5
(integer) 1
127.0.0.1:6379 get test
123
127.0.0.1:6379 get test
(nil)