Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。
Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据 是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。
对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持大数据存入内存中,只 要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库读/写磁盘的速度快几十到上百倍
Redis:Remote Dictionary Server(远程字典服务器)。是完全开源免费的,用C语言编写的,遵守BSD协议,是一 个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的 NoSQL数据库之一,也被人们称为数据结构服务器。
Redis与其他key - value缓存产品有以下三个特点: 1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2. Redis不仅仅支持简单的key - value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。 3. Redis支持数据的备份,即master - slave模式的数据备份。
高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在 缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相 当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存 中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。
yum install epel-release --下载fedora的epel仓库 yum install redis -- 安装redis数据库
首先需要安装tcl8.5版本以上,以解决 make test报错问题
TCL8.6安装
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
./configure
make
make install
安装完成后,再安装redis
安装源码编译支持库:yum install gcc gcc-c++
下载包:wget https://download.redis.io/releases/redis-6.2.3.tar.gz
解压包:tar xzf redis-6.2.3.tar.gz
进入redis目录:cd redis-6.2.3
编译安装:make
编译测试:make test
编译安装历史清除:make distclean
不指定配置文件启动
src/redis-server
会产生启动警告:
echo 1024 > /proc/sys/net/core/somaxconn
在/etc/sysctl.conf 下添加如下内容:
net.ipv4.ip_forward = 1
vm.overcommit_memory=1
指定配置文件启动
src/redis-server redis.conf
前端启动后,终端页面会进入redis控制台,无法进行其他操作,可以在redis.conf文件中修改为后台启动。
将文件中的daemonize no 修改为yes即可
daemonize yes
前台启动的关闭操作
强制关闭:Ctrl+c
kill -9 进程
正常关闭:src/redis-cli shutdown
•强制关闭只需在Redis控制台直接执行即可(redis可能会丢失部分数据)。
•正常关闭需要另开一个终端窗口才可执行(redis不会丢失数据,推荐使用)。
一旦前端启动的关闭命令执行,则redis控制台关闭,redis服务也会停掉。
1、单进程:单进程模型来处理客户端的请求。对读写等事件的相应。是通过epoll函数的包装来做到的。Redis的 实际处理速度完全依靠主进程的执行效率。Epoll是linux内核为处理大批量文件描述符而作了改进的epoll,是 linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的下 同CPU利用率。
2、默认16个库,类似数组下标从零开始,初始默认使用零号库。
3、select 命令切换数据库。
4、dbsize 查看当前数据库keys的数量
5、flushdb 清空当前数据库
6、flushall 清空全部数据库内容
7、redis索引都是从0开始的
IP地址 | 环境 |
192.168.75.142 | MySQL |
192.168.75.144 | Web服务器 |
192.168.75.145 | redis |
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
sed -i ‘s/enforcing/disabled/’/etc/selinux/config
setenforce 0
同步时间:
yum -y install ntp ntpdate
ntpdate cn.pool.ntp.org
hwclock --systohc
1.PHP安装
yum install php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel phpxmlrpc php-xml php-bcmath php-dba php-enchant
2.安装php的redis扩展
wget http://pecl.php.net/get/redis-2.2.7.tgz
tar -zxvf redis-2.2.7.tgz
cd redis-2.2.7/
phpize
./configure
make && make install
编译完成后,可以看到安装目录下的文件
在文件/etc/php.ini 末尾添加内容
重启Web服务器的httpd服务
systemctl restart httpd
在httpd发布目录下编辑php页面
查看phpinfo是否显示成功:
安装redis
wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz
tar xvf redis-2.8.19.tar.gz
#安装很简单、直接make就可以了
cd redis-2.8.19
make
安装完毕后,如下图所示:
修改文件 redis.conf 中的daemonize no 改为yes。让redis变为后台启动。
启动redis(redis服务器)
src/redis-server redis.conf
编写php测试代码(web服务器)
vim redis.php
connect('192.168.75.143',6379) or die ("could net connect redis server");
//此处修改自己的redis服务器地址,确保已经启动
# $query = "select * from test limit 9";
$query = "select * from dog1";
for ($key = 0; $key < 10; $key++)
{
if (!$redis->get($key))
{
$connect = mysql_connect('192.168.75.142','redis','Nebula@123');
mysql_select_db(mytest);
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8");
mysql_query("SET NAMES ‘GBK'");
mysql_query("SET NAMES ‘UTF8′");
$result = mysql_query($query);
$arr = [];
while ($row = mysql_fetch_assoc($result))
{
$redis->setex($row['id'],1,$row['name']);
$arr[] = $row;
}
$myserver = 'mysql';
$data = $arr;
break;}
else
{
$myserver = "redis";
$data[$key] = $redis->get($key);
}
}
echo $myserver;
echo "
";
for ($key = 0; $key < 10; $key++)
{
echo "number is $key";
echo "
";
if ($myserver == "mysql") {
$arr2 = array_map('end',$data);
echo "name is $arr2[$key]";
echo "
";
}
else{
echo "name is $data[$key]";
echo "
";
}
}
第一次测验,redis中没有对应的keys:
当再次访问时,redis中已经存在数据