NoSQL 学习一 ——NoSQL +LNMP +Redis

一、RDBMS 关系数据库管理系统
——Relation Database Management System
按照预先设置的组织结构,将数据存储在物理介质上,数据之间可以做关联操作。
常见的RDBMS服务软件:Oracle\ DB2\ MS SQL Server \MYSQL \Mariadb

二、NoSQL (=Not only SQL)
泛指非关系型数据库;
不需要预先定义数据存储结构;
表的每天记录都可以由不同的类型和结构。
常见的NoSQL服务软件: Redis \ MongoDB \CouchDB \ Neo4j \ FlockDB\Memcached
中文网站: www.redis.cn
三 、概述Redis
介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。
—— 是一款高性能的(key/values)分布式内存数据库;
—— 支持数据持久化,可以把内存里的数据保存到硬盘中;
——支持masyer-slave 模式数据备份;
Redis 的存储分为 内存存储 、 磁盘存储、 和log文件 三部分,配置文件中有三个参数对其进行配置。
Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且再次基础上实现了master-slave同步。

Redis 是内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如
字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询,
bitmaps,hyperloglogs和 地理空间(geospatial) 索引半径查询。
Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)
和不同级别的 磁盘持久化(persistence),并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis命令十分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14个redis命令组两百多个redis命令。

redis 基本使用:搭建redis服务器、数据类型、配置文件解析、应用LAMP+Redis 、常用管理命令 、持久化rdb/aof
高级应用:主从同步,redis 集群

四、部署Redis服务
要求:在192.168.4.56 主机上部署网站运行LAMP,
客户端192.168.4.254上打开浏览器访问56主机上的网站服务,可以访问到test.html页面和test.php页面,
把网站服务器运行时产生的数据存储到本机的redis 服务的数据库里。
在主机192.168.4.53部署redis服务
服务器程序: ——redis-server
客户端程序:——redis-cli
主配置文件:——/etc/redis/redis_portnumber

4.1 装包
软件包: redis-4.0.14.tar.gz
解压 :tar -xf redis-4.0.14.tar.gz
编译环境安装: yum -y install gcc gcc-c++ make
】#cd redis-4.0.14/
】# ls (里面有makefile不需要./configure,直接make && make install 即可)
]# make
]# make install

4.2 初始化配置
】# ls /root/redis-4.0.14/utils/ (install_server.sh 初始化配置文件)
】# ./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
——命令行连接redis的工具 Cli Executable : /usr/local/bin/redis-cli
]# echo $PATH

4.3 启动/停止服务
启动:(启动脚本/etc/init.d/redis_6379 )
#/etc/init.d/redis_ start
]# /etc/init.d/redis_6379 status (默认自启的)
]# netstat -antulp | grep :6379 查看端口
]# ps -C redis-server

停止:
#/etc/init.d/redis_ stop
]# /etc/init.d/redis_6379 stop
]# /etc/init.d/redis_6379 status

4.4 连接Redis数据库服务
]# /etc/init.d/redis_6379 start
#ps -C redis
#netstat -antulp | grep redis
#redis -cli //连接本机的redis 数据库服务
]# redis-cli
127.0.0.1:6379> ping (输入ping 验证)
PONG (连接成功)

4.5 常用操作指令
—— set keyname keyvalue 存数据
——get keyname 取数据
——keys * 列出所有存储的数据
——keys a? 列出变量名以a开头的变量名
——exists keyname
——type keyname
——move keyname dbname
——expire keyname 10
——del keyname
——flushall
——save 把内存里数据写入硬盘,但是会阻塞内存的写入
——shutdown 关闭服务
——bgsave 把内存里数据写入硬盘 ,不会阻塞
——move
——ttl 查看有效期(-1 永不过期,-2 已经过期)
——expire 设置配置有效期(单位为秒)
connection 命令组:
——quit 关闭连接,退出
——echo 回显输入的字符串
——auth password 为redis服务请求设置一个密码
——ping ping 服务器
——select 切换数据库,默认支持16个库编号0-15,用第一个0库
——swapdb 交换同一Redis服务器上的两个DATABASE

4.6 配置文件解析(1 常用管理的设置) vim /etc/redis/6379.conf

]# vim /etc/redis/6379.conf
1GB 1Gb 1gB are all the same 单位不区分大小写。
##include /path/to/local.conf 加载设置的路径
#loadmodule /path/to/my_module.so 模块加载的路径

bind 127.0.0.1 IP 设置本机之外连接redis服务使用的ip地址 (多个IP用空格间隔)
(bind 127.0.0.1 192.168.4.53)
]# netstat -antupl | grep :6379 (本机连接和本机之外连接的IP对应端口)
port 6379 修改端口之后,连接时需要指定端口 redis-cli -p
tcp-backlog 511 三次握手连接队列的长度,不能超过内核设定的值
timeout 0 (连接超时时间,0默认是永不超时)
tcp-keepalive 300 常连接的时间(每隔多久连接一次)
daemonize yes|no (是否以守护进程的方式运行)
pidfile /var/run/redis_6379.pid ——PID文件
loglevel notice 日志级别,(向日志文件里记录哪些信息,线上工作一般设置warning级别)
databases 16 设置数据库的个数(0-15)
SECURITY 安全 设置密码
requirepass 密码 修改密码
——例子:修改为 requirepass abc123
]# /etc/init.d/redis_6379 stop
]# /etc/init.d/redis_6379 start 重启服务
]# redis-cli
127.0.0.1:6379> auth abc123 (输入密码之后才能连接上)
或者:]# redis-cli -a abc123 (直接 -a 密码 就可以连接)
+++++++++设置密码之后如何停止服务+++++++++
]# /etc/init.d/redis_6379 stop 直接停会报错:
(error) NOAUTH Authentication required.
解决方法一:]# redis-cli -a abc123
127.0.0.1:6379> shutdown 服务停止
not connected> quit
方法二 :]# redis-cli -a abc123 shutdown 停止服务
]# /etc/init.d/redis_6379 status
原因:查看脚本43行没指定连接密码,想要直接可以停掉服务,就添加连接密码。
]# vim /etc/init.d/redis_6379
43 $CLIEXEC -p $REDISPORT -a abc123 shutdown
]# /etc/init.d/redis_6379 stop 直接停止服务成功

+++ CLIENTS +++534 # maxclients 10000 默认并发量
+++++++++++内存管理 MEMORY MANAGEMENT +++++++
561 # maxmemory 最大内存
563 #MAXMEMORY POLICY 最大内存清理策略(以下常见的清理策略)**
566 # volatile-lru -> Evict using approximated LRU among the keys with an expire set.
(最近最少使用的设置了过期时间的key)
567 # allkeys-lru -> Evict any key using approximated LRU. (删除最少使用的key)
570 # volatile-random -> Remove a random key among the ones with an expire set.
(在设置了过期的key里随机移除)
571 # allkeys-random -> Remove a random key, any key. (在所有的key中随机删除)
572 # volatile-ttl -> Remove the key with the nearest expire time (minor TTL) (移除最近过期的key)
573 # noeviction -> Don’t evict anything, just return an error on write operations. (不删除,写满时报错)
592 # maxmemory-policy noeviction 默认清理策略 (noeviction 永不清理,最好不用这个)
603 # maxmemory-samples 5 选取模板数据的个数(针对 lru 和 ttl 策略)

五、LNMP 网站服务器+redis
5.1 部署Nginx
]# tar -zxf nginx-1.12.2.tar.gz
]# cd nginx-1.12.2/
]# ./configure --prefix=/usr/local/nginx
报错:./configure: error: the HTTP rewrite module requires the PCRE library.
]# yum -y install pcre-devel 安装pcre
报错:./configure: error: the HTTP gzip module requires the zlib library.
]# yum -y install zlib-devel
]# ./configure --prefix=/usr/local/nginx
]# make && make install
]# ls /usr/local/nginx/
conf html logs sbin
]# /usr/local/nginx/sbin/nginx 启动服务
]# netstat -antulp | grep :80
]# ps -C nginx
]# echo 123 > /usr/local/nginx/html/test.html
]# firefox http://192.168.4.54/test.html
vim /usr/local/nginx/html/test.php (写PHP文件)
]# cat /usr/local/nginx/html/test.php

<? phpinfo(); ?>

firefox http://192.168.4.54/test.php (缺少解释代码的php)

安装PHP及依赖包:
rpm -ivh php-fpm-5.4.16-42.el7.x86_64.rpm
yum -y install php-common
]# systemctl start php-fpm
]# netstat -antulp | grep :9000
修改配置文件:
65 location ~ .php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t / document_root/ documentroot/fastcgi_script_name; (修改改行)
70 include fastcgi_params;
71 }
]# which php
]# php -m 查看php支持哪些模块
]# php -m | grep -i redis
]# tar -zxvf phpredis-4.3.0.tar.gz (安装支持redis模块的软件)
]# cd phpredis-4.3.0/
]# phpize
Can’t find PHP headers in /usr/include/php 报错:
The php-devel package is required for use of this command.
]# rpm -ivh php-devel-5.4.45-56.el7.art.x86_64.rpm
报错:错误:依赖检测失败:
php-cli(x86-64) = 5.4.45-56.el7.art 被 php-devel-5.4.45-56.el7.art.x86_64 需要
autoconf 被 php-devel-5.4.45-56.el7.art.x86_64 需要
automake 被 php-devel-5.4.45-56.el7.art.x86_64 需要

]# rpm -ivh --nodeps php-devel-5.4.45-56.el7.art.x86_64.rpm
]# cd /root/phpredis-4.3.0/
]# phpize
Cannot find autoconf. 报错
]# yum -y install autoconf
]# yum -y install automake
phpredis-4.3.0]# phpize (用来生成 /usr/bin/php-config )
Configuring for: (成功会出下以下三行内容)
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
]# find / -name “php-config”
/usr/bin/php-config (是可执行的二进制文件)
]# ll /usr/bin/php-config
配置编译安装:
]# ./configure --help | grep php
]# ./configure --with-php-config=/usr/bin/php-config
]# make
]# make install
Installing shared extensions: /usr/lib64/php/modules/ (模块文件安装路径)
]# ls /usr/lib64/php/modules/
curl.so fileinfo.so json.so phar.so redis.so zip.so
修改配置文件:
]# vim /etc/php.ini
728 extension_dir = “/usr/lib64/php/modules/” 路径 (""双引号内不能由空格)
729 ; On windows:
730 extension = “redis.so” 模块名
]# php -m | grep -i redis
报错:
PHP Warning: PHP Startup: Unable to load dynamic library ’ /usr/lib64/php/modules/curl.so’ - /usr/lib64/php/modules/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ’ /usr/lib64/php/modules/fileinfo.so’ - /usr/lib64/php/modules/fileinfo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ’ /usr/lib64/php/modules/json.so’ - /usr/lib64/php/modules/json.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ’ /usr/lib64/php/modules/phar.so’ - /usr/lib64/php/modules/phar.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ’ /usr/lib64/php/modules/zip.so’ - /usr/lib64/php/modules/zip.so: cannot open shared object file: No such file or directory in Unknown on line 0
因为httpd重复加载了PHP的动态模块,只需要删除对应的ini文件即可。
]# cd /etc/php.d/
php.d]# ls
curl.ini fileinfo.ini json.ini phar.ini zip.ini
]# rm -rf /etc/php.d
]# php -v
]# cd /root/phpredis-4.3.0/
]# php - m | grep -i redis
redis

安装配置redis数据库
tar -zxf redis-4.0.14.tar.gz
cd redis-4.0.14/
ls
make && make install
./utils/install_server.sh 初始化设置
/etc/init.d/redis_6379 status
redis-cli
vim /etc/redis/6379.conf (这里配置文件可以不修改)

验证:
]# vim /usr/local/nginx/html/lkredis.php

<?php $redis=new redis(); $redis->connect('127.0.0.1,6379'); $redis->set('redistest','66666'); echo $redis->get('redistest'); ?>

基本操作例子:
127.0.0.1:6379> set k1 v1 存
OK
127.0.0.1:6379> get k1 取/查看
“v1”
127.0.0.1:6379> del k1 删除
(integer) 1
127.0.0.1:6379> get k1
(nil) 没有
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exists k2 也可以测试变量存不存在
(integer) 0
127.0.0.1:6379> set k2 mama
OK
127.0.0.1:6379> exists k2
(integer) 1
127.0.0.1:6379> set k1 9
OK
127.0.0.1:6379> type k1
string
127.0.0.1:6379> keys *

  1. “k1”
  2. “k2”
    127.0.0.1:6379> flushall 删除内存里的数据
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> ttl k2
    (integer) -2
    127.0.0.1:6379[1]> swapdb 0 1
    OK 交换连接DATABASE 0,1。
    127.0.0.1:6379[1]> echo helloword
    “helloword”
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值