NoSQL数据库管理
1部署redis服务
2 Lnmp+redis
RDBMS
组织结构 表
物理介质存储:硬盘
数据之间可以关联操作
MySQL SQlsever oracle mariadb DB2
Redis和RDBMS有什么区别?
Redis和RDBMS之间存在很多差异:
Redis是NoSQL数据库,而RDBMS是SQL数据库。
Redis遵循键值结构,而RDBMS遵循表结构。
Redis非常快,而RDBMS相对较慢。
Redis将所有数据集存储在主存储器中,而RDBMS将其数据集存储在辅助存储器中。
Redis通常用于存储小型和常用文件,而RDBMS用于存储大文件。
Redis仅为Linux,BSD,Mac OS X,Solaris提供官方支持。它目前没有为Windows提供官方支持,而RDBMS提供对两者的支持。
NoSQL
***********************************
NoSQL
泛指非关系型数据库
1不需预先定义存储结构
2每条记录可以有不同类型和字段个数
NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。
目前大家基本认同将NoSQL数据库分为四大类:
1键值存储数据库,
2文档型数据库,
3列存储数据库
4图形数据库,
其中每一种类型的数据库都能够解决关系型数据不能解决的问题。在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体。
主流nosql的详解:MongoDB、Hbase、Redis Memcached
*************************************
Redis Redis代表REmote DIctionary Server。
Redis 是一个开源(BSD许可)的内存中的数据结构存储系统,
它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings), 哈希(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps,
Redis 内置了复制(replication),LUA脚本(Lua scripting),LRU淘汰算法(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability
Redis
Redis 是一个开源的使用 C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。
1.Redis 特点:
所用语言:C/C++
特点:运行异常快
使用许可: BSD
协议:类 Telnet
有硬盘存储支持的内存数据库,
但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)
Master-slave复制
虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。
INCR & co (适合计算极限值或统计数据)
支持 sets(同时也支持 union/diff/inter)
支持列表(同时也支持队列;阻塞式 pop操作)
支持哈希表(带有多个域的对象)
支持排序 sets(高得分表,适用于范围查询)
Redis支持事务
支持将数据设置成过期数据(类似快速缓冲区设计)
Pub/Sub允许用户实现消息机制
- Redis 优势
1)非常丰富的数据结构;
2.)Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断;
3.)数据存在内存中,读写非常的高速,可以达到10w/s的频率。
3.Redis 缺点
Allow-quiry {any;};
1) Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题;
2.)持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;
3)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
4.Redis 应用场景:
最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
例如:微博、数据分析、实时数据搜集、实时通讯等。
Redis架构中有两个主要程序:
Redis客户端
Redis服务器
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
这些客户端和服务器可以位于同一台计算机或两台不同的计算机
5
Redis的特点
以下是Redis的主要功能列表:
速度: Redis将所有数据集存储在内存中,这就是它非常快的原因。它可以在入门级Linux机器中每秒写(SET)11万次,读(GET)8.1万次。Redis支持Pipelining命令,可一次发送多条命令来提高吞吐率,减少通信延迟。
持久性:当所有数据都存在于内存中时,根据自上次保存以来经过的时间和/或更新次数,使用灵活的策略将更改异步保存在磁盘上。Redis支持仅附加文件(AOF)持久性模式。
数据结构: Redis支持各种类型的数据结构,例如字符串,散列,集合,列表,带有范围查询的有序集,位图,超级日志和带有半径查询的地理空间索引。
原子操作:处理不同数据类型的Redis操作是原子操作,因此可以安全地设置或增加键,添加和删除组中的元素,增加计数器等。
支持的语言: Redis支持许多语言,如ActionScript,C,C ++,C#,Clojure,Common Lisp,D,Dart,Erlang,Go,Haskell,Haxe,Io,Java,JavaScript(Node.js),Julia,Lua ,Objective-C,Perl,PHP,纯数据,Python,R,球拍,Ruby,Rust,Scala,Smalltalk和Tcl。
主/从复制: Redis遵循非常简单快速的主/从复制。配置文件中只需要一行来设置它,而Slave在Amazon EC2实例上完成10 MM key集的初始同步需要21秒。
分片: Redis支持分片。与其他键值存储一样,跨多个Redis实例分发数据集非常容易。
可移植: Redis是用ANSI C编写的,适用于大多数POSIX系统,如Linux,BSD,Mac OS X,Solaris等。据报道,如果使用Cygwin编译,Redis将在WIN32下编译和工作,但目前没有正式的Windows支持。
***************************************
一:
部署Redis服务
1装包
Yum -y install gcc
Tar -zxvf redius-4.0.8
Cd redis-4.0.8
Make && Make install
2初始化
./utils/install_server.sh
ss -ntulp | grep :6379
端口6379
主配置文件:/etc/redis/6379.conf
日志文件:/var/log/redis_63Allow-quiry {any;};
79.log
数据库目录:/var/lib/redis/6379
服务器启动程序:/usr/local/bin/redis-server
命令行连接命令:/usr/local/bin/redis-cli
3启动服务
/etc/init.d/redis_6379 start
ps -C redis-server -查看进程
Ss -ntulp | grep :6379
4连接服务 存储数据
redis-cli修改Redis服务运行参数
3.1 问题
对Redis服务器192.168.4.50做如下配置:
端口号 6350
IP地址 192.168.4.50
连接密码 123456
测试配置
127.0.0.1:6379 > ping
Pong
6379> set
二:
Redis 命令
Set mset get mget
Keys type exits del
Ttl expire save move flushdb fiushall shotdown select
***************************************
51-58部署redis 服务
52主机部署lnmp 环境
*****************************************
三 配置文件解析
修改Redis服务运行参数
对Redis服务器192.168.4.50做如下配置:
端口号 6350
IP地址 192.168.4.50
连接密码 123456
测试配置
Cp /etc/redis/6379.conf /root/6379.conf
/etc/redis/6379.conf stop
Vim /etc/redis/6379.conf
Bind 192.168.4.50
Port 6350
Requirepass 123456
Redis-cli -h 192.168.4.50 -p 6350 -a 123456
1 配置分类
2 数据数据单位
3 常用配置
Port 6379 端口
70 行 bind 127.0.0.1 ip地址
137 daemonize yes 守护进程方式运行
Databases 16 数据库个数
Logfile /var/log/redis_6379.log 日志文件
Maxclients 10000 并发连接数量
Dir /var/lib/redis/6379 数据库目录
4 内存管理
内存清除策略
Volatile-lru 删除设置了ttl的最近最少使用的key
Allkeys-lru 删除`所有最少使用的key
Allkeys-lfu 删除所有key中使用频率最少的key
Volatile-lfu 删除设置了过期时间的key中会使用频率最少的key
Volatile-random在设置了ttl的key里随机删除
Allkeys-random 随机移除key
Volatile-ttl 删除最近过期key
Noeviction 不删除,写满时报错
优化设置
Maxmemory 最大内存
Maxmemory-policy 定义使用策略
Maxmemory-samples 选取key模板的个数
四
部署LNMP+Redis
具体要求如下:
在主机192.168.4.57部署LNMP 环境
配置PHP支持redis
编写网站脚本,把数据存储到redis服务器192.168.4.50
1安装源码nginx软件及php-fpm
]#yum -y install gcc pcre-devel zlib-devel //安装依赖
]#tar -zxvf nginx-1.12.2.tar.gz //解压
]#cd nginx-1.12.2 //进源码目录
]#./configure //配置
Make && make install
ln -s /usr/local/nginx/sbin/nginx /sbin/
]#yum -y install php-fpm
2)修改配置nginx.conf
] # vim +65 /usr/local/nginx/conf/nginx.conf
fastcgi_pass 127.0.0.1:9000;
3 启服务
4测试配置
vim /usr/local/nginx/html/test.php //编写php文件
]# curl http://localhost/test.php //访问nginx服务
hello world!!!
5配置支持redis
1)运行redis 装包启服务
Tar -zxvf redis-4.0.8.tar.gz
Cd redis-4.0.8
Make && make install
./utils/install_server.sh
2)配置支持redis
装包 php扩展
rpm -qa php php-devel automake autoconf
tar -xf php-redis-2.2.4.tar.gz
Cd php-redis-2.2.-4
phpize
./configure --with-php-config=/usr/bin/php-config
cd phpredis-2.2.4/
Vim /etc/php.ini
728 extension_dir = “/usr/lib64/php/modules/” //模块目录
On windows:
730 extension = “redis.so” 删掉dir //模块米名
systemctl restart php-fpm.service
Php -m | grep 0i redis
6 测试连接
存储和获取
存储变量
查询变量
1
[root@mysql52 lnmp]
cp linkredis.php /usr/local/nginx/html/save.php
vim <?php/usr/local/nginx/html/save.php
$redis = new redis();
$redis->connect(‘192.168.4.50’,6350);
$redis->auth(*123456);
$redis->set(‘linux’,‘redhat’);
?>
2
cp /usr/local/nginx/html/save.php /usr/local/nginx/html/get.php
Vim /usr/local/nginx/html/get.php
~
3
cp linkredis.php /usr/local/nginx/html/
[root@mysql52 lnmp]# vim /usr/local/nginx/html/