NoSQL(NoSQL =Not Only SQL ),意为反SQL运动,是一项全新的数据库革命性运动,2000年前就有人提出,发展至2009年趋势越发高涨。它是指运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
分类 | Examples举例 | 经典应用场景 | 数据模型 | 优点 |
---|---|---|---|---|
键值(key-value) | Tokyo、Cabinet / Tyrant、RedisVoldemort、Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等 | Key 指向Value的键值对,通常用hash table 实现 | 查找速度快 |
列存储数据库 | Cassandra、HBase、Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在-起 | 查找速度快,可扩展性强,更容易进行分布式扩展 |
文档型数据库 | CouchDB、MongoDB | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解 Value的内容) | Key-Value 对应的键值对,Value为结构化数据。 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构。 |
图形(Graph)数据厍 | Neo4J,InfoGrid,Infinite Graph | 社交网络,推荐系统等。专注于构建关系图消 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等。 |
NoSQL是key-value 形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。
这类数据库主要有以下特点:
Redis 是一个开源的,先进的 key-value存储。它通常被称为数据结构服务器,因为键可以包含string(字符串)、hash(哈希)、list(链表)、set(集合)和zset(sorted-set–有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。
Redis 和 Memcached类似,它支持存储的value类型相对更多,与memcached一样,为了保证效率,数据都是缓存在内存中,区别是Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis的官方网站是:http://redis.io
下载安装包:
yum install -y gcc* make
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
wget https://download.redis.io/releases/redis-2.8.6.tar.gz
编译安装:
~ tar -xvf redis-6.2.6.tar.gz
~ cd redis-6.2.6/
~ make
~ make PREFIX=/usr/local/redis install
#指定安装位置,如果没有指定安装位置 PREFIX=/usr/local/redis,则make install 会把redis安装到/usr/local/bin/目录下
~ mkdir -pv /usr/local/redis/etc
~ cp ./redis.conf /usr/local/redis/etc
#复制Redis的配置文件到/usr/local/redis/etc下,方便于管理
#修改配置文件
~ vim /usr/local/redis/etc/redis.conf
daemonize no #修改为 yes,后台启动
#启动服务
~ ln -s /usr/local/redis/bin/* /usr/bin/
#/usr/local/redis/bin/redis-server [配置文件]
~ redis-server /usr/local/redis/etc/redis.conf
#必须指定配置文件位置,否则会提示警告
~ netstat -ntlp | grep 6379
#客户端连接
~ redis-cli
#-h IP :连接指定的Redis服务器
#-p 6379 :指定Redis服务器的端口,默认6379端口
#-a 密码 :使用密码登录
#-n 数据库号:指定连接哪个数据库
#--raw :Redis支持存储中文
#停止Redis
~ redis-cli shutdown
或者
~ pkill -9 redis
#开启Redis服务
redis-server /usr/local/redis/etc/redis.conf
string 是最简单的类型,一个key对应一个value,string类型是二进制安全的。redis的 string可以包含任何数据。
例如:我们添加一个name=atguigu的键值对应。
redis-cli
127.0.0.1:6379>set name atguiguu
setnx:设置 key对应的值为string 类型,如果 key已经存在,返回0,nx是 not exist的意思。
get:获取key 对应的 string 值,如果key不存在返回nil
mset & mget:同时设置和获取多个键值对
incrby:对key的值做加加(指定值)操作,并返回新的值。
del:删除一个已创建的key
范例:
~ redis-cli
127.0.0.1:6379> set name zhongzhiwei
OK
127.0.0.1:6379> get name
"zhongzhiwei"
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> setnx name lisi
(integer) 0
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> mset age 18 sex man
OK
127.0.0.1:6379> mget age sex
1) "18"
2) "man"
127.0.0.1:6379> incrby age 2
(integer) 20
127.0.0.1:6379> mget age
1) "20"
127.0.0.1:6379> incrby age -2
(integer) 18
127.0.0.1:6379> mget age
1) "18"
127.0.0.1:6379> keys *
1) "name"
2) "sex"
3) "age"
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "sex"
Redis hash是一个string 类型的 field(字段)和 value 的映射表,它的添加、删除操作都是0(1)平均;hash特别适合用于存储对象,相较于将对象的每个字段存成单个string类型,将一个对象存储在 hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
redis127.0.0.1:6379>hset tnuml name zhongzw
hget、hmset、hmget意义同上近似
hdel :删除制定表中的某一个键值对
hgetall:列出表中的所有键值对,
范例:
127.0.0.1:6379> hset a1 name zhangsan
(integer) 1
127.0.0.1:6379> hset a1 sex man
(integer) 1
127.0.0.1:6379> hset a2 name laow
(integer) 1
127.0.0.1:6379> hset a2 age 20
(integer) 1
127.0.0.1:6379> hget a1 name
"zhangsan"
127.0.0.1:6379> hmget a1 name sex
1) "zhangsan"
2) "man"
127.0.0.1:6379> hgetall a1
1) "name"
2) "zhangsan"
3) "sex"
4) "man"
127.0.0.1:6379> hdel a2 name
(integer) 1
127.0.0.1:6379> hgetall a2
1) "age"
2) "20"
list是一个链表结构,主要功能是push、pop、获取一个范围内的所有值等等,操作中 key理解为链表的名字。Redis 的 list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop 操作从链表的头部或尾部添加删除元素。
redis127.0.0.1:6379> lpush zhangsan zhangsan
redis127.0.0.1:6379> lpush zhangsan 18
redis127.0.0.1:6379>lrange zhangsan 0 -1
0 -1:此范围代表全部元素,意为从头到尾
范例:
127.0.0.1:6379> LPUSH zhangsan 18
(integer) 1
127.0.0.1:6379> LPUSH zhangsan zhangsan
(integer) 2
127.0.0.1:6379> LPUSH zhangsan man
(integer) 3
#0到-1取所有
LRANGE zhangsan 0 -1
1) "man"
2) "zhangsan"
3) "18"
set 是集合,他是 string 类型的无序集合。Set是通过 hash table实现的,对集合我们可以取并集、交集、差集。通过这些操作我们可以实现社交网站中的好友推荐和 blog 的 tag 功能。集合不允许有重复值。【合集一般很少使用,因为一个集合当中不允许有重复的数值】
redis127.0.0.1:6379> sadd mset 1 2 3 4
redis127.0.0.1:6379> smembers mset
redis127.0.0.1:6379>sdiff mset1 mset2 .
范例:
127.0.0.1:6379> SADD mset 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> SMEMBERS mset
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> SREM mset 2 4 6
(integer) 3
127.0.0.1:6379> SMEMBERS mset
1) "1"
2) "3"
3) "5"
127.0.0.1:6379> SPOP mset
"1"
127.0.0.1:6379> SMEMBERS mset
1) "3"
2) "5"
127.0.0.1:6379> SCARD mset
(integer) 2
127.0.0.1:6379> SADD mset2 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> SINTER mset mset2
1) "3"
2) "5"
127.0.0.1:6379> SUNION mset mset2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
zset是 set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存的value,一列存的顺序。操作中 key理解为zset的名字。
redis127.0.0.1:6379> zadd zset 2 zhangsan 1 lisi 1 wangwu
redis127.0.0.1:6379> zrange zset 0 -1 withscores
注意: withscores返回集合中元素的同时,返回其分数(score)
redis127.0.0.1:6379> zrem zset zhangsan
范例:
127.0.0.1:6379> ZADD zset 2 zhangsan 1 lisi 1 wangwu
(integer) 3
127.0.0.1:6379> ZRANGE zset 0 -1 withscores
1) "lisi"
2) "1"
3) "wangwu"
4) "1"
5) "zhangsan"
6) "2"
127.0.0.1:6379> ZCARD zset
(integer) 3
redis127.0.0.1:6379>keys h*llo
范例:
127.0.0.1:6379> KEYS *
1) "zhangsan"
2) "mset"
3) "mset2"
4) "zset"
5) "a1"
127.0.0.1:6379> KEYS m*
1) "mset"
2) "mset2"
127.0.0.1:6379> EXISTS name
(integer) 0
127.0.0.1:6379> EXISTS a1
(integer) 1
127.0.0.1:6379> SET name zhangsan
OK
#没有设置剩余生存时间时,返回-1
127.0.0.1:6379> TTL name
(integer) -1
127.0.0.1:6379> EXPIRE name 30
(integer) 1
127.0.0.1:6379> TTL name
(integer) 20
#当key不存在时,返回-2
127.0.0.1:6379> TTL name
(integer) -2
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> MOVE mset 1
(integer) 1
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "mset"
127.0.0.1:6379[1]> TYPE mset
set
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> DBSIZE
(integer) 4
127.0.0.1:6379> INFO
127.0.0.1:6379> CONFIG GET *
#删除当前数据库中所有的数据
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "mset"
#flushall:删除所有数据库中的所有数据
127.0.0.1:6379[1]> FLUSHALL
OK
127.0.0.1:6379[1]> KEYS *
(empty array)
给redis服务器设置密码1、修改配置文件,
vi /usr/local/redis/etc/redis.conf
requirepass 123456
2、重启redis
pkill redis
.../bin/redis-server .../etc/redis.conf
#或者
redis-cli shutdown
redis-server /usr/local/redis/etc/redis.conf
3、客户端登录
.../bin/redis-cli -a 123456
或 交互模式下使用【auth密码】命令
范例:密码保护
~ redis-cli
127.0.0.1:6379> SET name haha
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> SET name haha
OK
127.0.0.1:6379>
~ redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> SET name hehe
OK
127.0.0.1:6379> GET name
"hehe"
Redis主从复制过程:
老版本:
从:
slaveof #主服务器的I和端口
masterauth #主服务器的密码(主服务器要设置好密码)
新版本Redis 5.*以上:
主:
找到bind 127.0.0.1注释掉,或者修改为本机的IP地址(重启)
从:
replicaof #主服务器的IP和端口
masterauth #主服务器的密码(主服务器要设置好密码)
范例:主从同步
#需要两台机器110,111安装Redis6.2.6版本
#110已经安装Redis完成
110~ vim /usr/local/redis/etc/redis.conf
bind 10.0.0.110 -::1
appendonly yes
#111与110安装类似,配置文件需要修改
111~ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
111~ tar -xvf redis-6.2.6.tar.gz
111~ cd redis-6.2.6/
111~ make && make PREFIX=/usr/local/redis install
#指定安装位置,如果没有指定安装位置 PREFIX=/usr/local/redis,则make install 会把redis安装到/usr/local/bin/目录下
111~ mkdir -pv /usr/local/redis/etc
111~ cp ./redis.conf /usr/local/redis/etc
#复制Redis的配置文件到/usr/local/redis/etc下,方便于管理
#修改配置文件
111~ vim /usr/local/redis/etc/redis.conf
daemonize no #修改为 yes,后台启动
#replicaof
replicaof 10.0.0.110 6379
#masterauth
masterauth 123456
#启动服务
111~ ln -s /usr/local/redis/bin/* /usr/bin/
#/usr/local/redis/bin/redis-server [配置文件]
111~ redis-server /usr/local/redis/etc/redis.conf
#必须指定配置文件位置,否则会提示警告
111~ netstat -ntlp | grep 6379
范例:验证
110~ 127.0.0.1:6379> SET name zhangsan
OK
111~ redis-cli
127.0.0.1:6379> KEYS *
1) "name"
127.0.0.1:6379> GET name
"zhangsan"
127.0.0.1:6379> INFO
# Replication
role:slave
master_host:10.0.0.110
master_port:6379
master_link_status:up
Redis是一个支持持久化的内存数据库,也就是说需要经常将内存中的数据同步到硬盘来保证持久化。
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。这种持久化方式被称为快照snapshotting(快照)。
#过了900秒并且有1个key发生了改变就会触发save动作。
#过了300秒并且有10个key '发生了改变就会触发save动作。
#过了60秒并且至少有10000个key发生了改变也会触发save动作。
结论:在redis.conf文件中 dir .!定义了数据库文件的存放位置,默认是当前目录。所以每次重启redis服务所在的位置不同,将会生成新的dump.rdb文件;建议服务器搭建完成时先修改快照文件保存位置。
范例:
110~ mkdir -pv /usr/loca/redis/datadir
110~ vim /usr/local/redis/etc/redis.conf
dbfilename dump.rdb
dir /usr/loca/redis/datadir
使用AOF 会让你的Redis更加耐久:你可以使用不同的持久化策略:每次写的时候备份、每秒备份、无备份。使用默认的每秒备份策略,Redis 的性能依然很好(备份是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据。
打开redis.conf配置文件开启AOF持久化
~ vim /usr/local/redis/etc/redis.conf
#默认不使用AOF持久化(450行)将no改成yes。
appendonly no
###
#有写操作,就马上写入磁盘。效率最慢,但是最安全
appendfsync always
#默认,每秒钟写入磁盘一次。
appendfsync everysec
###
#不进行AOF备份,将数据交给操作系统处理。最快,最不安全,
appendfsync no
#可以使用 cat 查看
~ redis-cli -a 123456 shutdown
~ redis-server /usr/local/redis/etc/redis.conf
测试:重启redis服务,登录client添加一个键值,退出然后ls命令查看下是否生成appendonly.aof
~ redis-cli -a 123456
127.0.0.1:6379> SET password 123456
OK
127.0.0.1:6379> SET max man
OK
~ cd /usr/local/redis/datadir/
~ ls
appendonly.aof dump.rdb
~ cat appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
SET
$8
password
$6
123456
*3
$3
SET
$3
max
$3
man
mkdir -pv /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
cat > /etc/yum.repos.d/CentOS-ISO.repo <<EOF
[CentOS-ISO]
name=CentOS-ISO
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
EOF
yum install -y gcc*
环境准备:
一台 RockyLinux | CentOS 7 最小化安装
禁用SELinux ,禁用防火墙
配置 yum 源(阿里源 & 清华源)
#LNMP服务器
yum install -y nginx php-fpm php-json php-mysqlnd mariadb-server
yum install -y php-devel
#数据库服务器
yum install -y mariadb-server
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
tar -xvf latest-zh_CN.tar.gz
mv wordpress/* /usr/share/nginx/html
#避免在后续上传资源会报错
chown -R nginx:nginx /usr/share/nginx/html/
vim /etc/nginx/nginx.conf
......
location / {
index index.php;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
......
vim /etc/php-fpm.d/www.conf
......
user = nginx
group = nginx
......
listen = 0.0.0.0:9000
##listen = /run/php-fpm/www.sock 可以使用的套接字
~ systemctl enable --now nginx php-fpm
#查看服务是否启动
#确保nginx , php-fpm 服务成功启动
~ systemctl is-active nginx php-fpm
active
active
#查看服务端口
#查看是否打开相应的端口
~ ss -tunlp
#数据库服务器
~ systemctl enable --now mariadb
#systemctl start mariadb ; systemctl enable mariadb
#数据库加固
~ mysql_secure_installation
Set root password? [Y/n] y
New password: 123456
Re-enter new password: 123456
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
~ mysql -uroot -p123456
#!/bin/bash
#REDIS_VERSION="6.2.6"
REDIS_VERSION="2.8.6"
DIR="/usr/local/redis"
CONFIG="/usr/local/redis/etc"
yum install -y gcc* make
wget https://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz
tar -xvf redis-${REDIS_VERSION}.tar.gz &> /dev/null && rm -rf redis-${REDIS_VERSION}.tar.gz
cd redis-${REDIS_VERSION}/
make -j 2 && make PREFIX=$DIR install
mkdir -pv $CONFIG && cp ./redis.conf /usr/local/redis/etc
sed -i.bak -r '/^daemonize/c\daemonize yes' /usr/local/redis/etc/redis.conf
ln -s /usr/local/redis/bin/* /usr/bin/
redis-server /usr/local/redis/etc/redis.conf
netstat -ntlp | grep 6379
a.配置网站nginx,并启动nginx
~ vim /etc/nginx/nginx.conf
#主配置文件中没有server区域,需要到这里去
#大概36行左右
include /etc/nginx/conf.d/*.conf
#以下步骤可不做
~ vim /etc/nginx/conf.d/default.conf
server {
listen 80;
#域名
server_name www.kubesphere.com;
location / {
#root /usr/share/nginx/html;
#网站页面的位置
root /www;
#添加一个支持php的功能
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
include fastcgi_params;
}
}
~ systemctl restart nginx
b.vim /etc/php-fpm.d/www.conf
~ vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
~ systemctl enable --now nginx php-fpm
#查看服务是否启动
#确保nginx , php-fpm 服务成功启动
~ systemctl is-active nginx php-fpm
#数据库服务器
~ systemctl enable --now mariadb
#systemctl start mariadb ; systemctl enable mariadb
#数据库加固
~ mysql_secure_installation
Set root password? [Y/n] y
New password: 123456
Re-enter new password: 123456
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
~ mysql -uroot -p123456
#mkdir -pv /www
cat > /usr/share/nginx/html/index.php <<EOF
EOF
systemctl restart nginx
以上搭建了一个LNMP环境
注意:之前脚本安装Redis完成,该步可不做!!!
Redis的官方网站是:http://redis.io
下载安装包:
yum install -y gcc* make
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
wget https://download.redis.io/releases/redis-2.8.6.tar.gz
编译安装:
~ tar -xvf redis-6.2.6.tar.gz
~ cd redis-6.2.6/
~ make
~ make PREFIX=/usr/local/redis install
#指定安装位置,如果没有指定安装位置 PREFIX=/usr/local/redis,则make install 会把redis安装到/usr/local/bin/目录下
~ mkdir -pv /usr/local/redis/etc
~ cp ./redis.conf /usr/local/redis/etc
#复制Redis的配置文件到/usr/local/redis/etc下,方便于管理
#修改配置文件
~ vim /usr/local/redis/etc/redis.conf
daemonize no #修改为 yes,后台启动
#启动服务
~ ln -s /usr/local/redis/bin/* /usr/bin/
#/usr/local/redis/bin/redis-server [配置文件]
~ redis-server /usr/local/redis/etc/redis.conf
#必须指定配置文件位置,否则会提示警告
~ netstat -ntlp | grep 6379
#客户端连接
~ redis-cli
#-h IP :连接指定的Redis服务器
#-p 6379 :指定Redis服务器的端口,默认6379端口
#-a 密码 :使用密码登录
#-n 数据库号:指定连接哪个数据库
#--raw :Redis支持存储中文
#停止Redis
~ redis-cli shutdown
或者
~ pkill -9 redis
phpredis-master.tar.gz下载:https://pan.baidu.com/s/1i37R8TB
a.解压
tar -xvf phpredis-master.tar.gz
yum install -y php-devel
b.安装
cd phpredis-master/
phpize
./configure --with-php-config=/usr/bin/php-config
make -j 2 && make install
#查看php模块
ll /usr/lib64/php/modules/
c.让php支持Redis
#在php主配置文件中添加redis.so
~ vim /etc/php.ini
#跳转到文件的最后一行
extension=redis.so
~ systemctl restart php-fpm.service
~ mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE mytest;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> USE mytest;
Database changed
MariaDB [mytest]> CREATE TABLE test (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(20) DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE=innodb AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
MariaDB [mytest]> DESC test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
MariaDB [mytest]> INSERT INTO test VALUES (1,'a1'),(2,'a2'),(3,'a3'),(4,'a4'),(5,'a5');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
MariaDB [mytest]> SELECT * FROM test;
+----+------+
| id | name |
+----+------+
| 1 | a1 |
| 2 | a2 |
| 3 | a3 |
| 4 | a4 |
| 5 | a5 |
+----+------+
5 rows in set (0.00 sec)
Redis的服务启动,已在之前脚本执行时开启了。该步可不做。
~ vim php-redis.php
<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379) or die ("redis not found");
$query = "select * from test limit 4";
for ($key=1;$key<5;$key++)
{
if (!$redis->get($key))
{
$connect = mysql_connect('127.0.0.1','root','123456');
mysql_select_db(mytest);
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result))
{
$redis->set($row['id'],$row['name']);
}
$myserver = 'mysql';
break;
}
else
{
$myserver = "redis";
$data[$key] = $redis->get($key);
}
}
echo $myserver;
echo "
";
for ($key=1;$key<5;$key++)
{
echo "number is $key";
echo "
";
echo "name is $data[$key]";
echo "
";
}
?>
~ cp -a php-redis.php /usr/share/nginx/html/redis.php
~ systemctl restart nginx php-fpm
~ curl 10.0.0.110/redis.php
测试php-Redis解析页面。浏览器访问http://10.0.0.110/redis.php
这就完成了PHP-Redis解析页面
扩展开发版php-redis脚本
~ vim php-redis.php
<?php
int_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
//开启debug
//mysql库:mytest表:test
$redis = new redis();
$redis->connect('127.0.0.1',6379) or die ("redis not found");
$query = "select * from test limit 4";
for ($key=1;$key<5;$key++)
{
if (!$redis->get($key))
//判断redis中是否有1 2 3 4 5的键,没有连接数据库查询mytest库的test表,然后插入到redis中
{
$connect = mysql_connect('127.0.0.1','root','123456');
mysql_select_db(mytest);
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result))
{
$redis->set($row['id'],$row['name']);
//从MySQL中获取的资源插入到Redis中,并设置有效时间为30s
}
$myserver = 'mysql';
break;
}
else
//判断redis中是否有1 2 3 4 5的键,有直接打印redis中的 1 2 3 4 5 键的值
{
$myserver = "redis";
$data[$key] = $redis->get($key);
}
}
echo $myserver;
echo "
";
for ($key=1;$key<5;$key++)
{
echo "number is $key";
echo "
";
echo "name is $data[$key]";
echo "
";
}
?>