Redis数据库

news2024/9/22 15:39:43

1.Redis简介

1.1Redis简介

Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。

Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据 是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。

对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持大数据存入内存中,只 要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库读/写磁盘的速度快几十到上百倍

1.2.Redis特点

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模式的数据备份。

1.3.为什么要用Redis

高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在 缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相 当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存 中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

1.4.Redis与memcached的区别

2.Redis安装

2.1.yum安装

yum install epel-release --下载fedora的epel仓库 yum install redis -- 安装redis数据库

2.2.源码安装

首先需要安装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

 3.Redis启动和停止

3.1.Redis的启动和关闭

不指定配置文件启动

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服务也会停掉。

3.2.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开始的

4.Redis主从复制

4.1.主从复制架构准备

IP地址环境
192.168.75.142MySQL
192.168.75.144Web服务器
192.168.75.145redis

关闭防火墙:

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

4.2.web服务器准备

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

<?php
$redis=new Redis();
$redis->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 "<br>";
for ($key = 0; $key < 10; $key++)
{
echo "number is <b><font color=#FF0000>$key</font></b>";
echo "<br>";
if ($myserver == "mysql") {
$arr2 = array_map('end',$data);
echo "name is <b><font color=#FF0000>$arr2[$key]</font></b>";
echo "<br>";
}
else{
echo "name is <b><font color=#FF0000>$data[$key]</font></b>";
echo "<br>";
}
}

第一次测验,redis中没有对应的keys:

当再次访问时,redis中已经存在数据 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++实现堆排序

看了一下优先队列&#xff0c;查了一下堆排序。堆排序主要就是建最大堆&#xff08;最小堆&#xff09;和交换2个操作。如果建的是最大堆&#xff0c;那么交换的时候&#xff0c;父节点就和最大的子节点比较&#xff0c;如果它比最大的子节点还大&#xff0c;那就不用比了。因为…

STM32MP157开发板Linux+Qt项目实战:智能猫眼

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器&#xff0c;集成2Cortex-A7核和1个Cortex-M4 核&#xff0c;A7核上可以跑Linux操作系统&#xff0c;M4核上可以跑FreeRTOS…

docker 搭建postgres 主从 pgadmin

准备工作 创建一个docker bridge 网路用于测试 docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 pgnetwork # 查看 docker network ls 设置了网段为 192.168.0.0&#xff0c;规划主从库IP端口如下&#xff1a; 主库 192.168.0.101:5432 从库…

Ubuntu16.04安装深度学习环境(CUDA9.2+PyTorch0.4.1+Python2.7)

之前已经安装好了显卡驱动&#xff0c;接着就可以安装CUDA了于是又找了好几篇文章进行参考&#xff1a;https://zhuanlan.zhihu.com/p/361190040https://blog.csdn.net/qq_43665602/article/details/125752433https://blog.csdn.net/myg22/article/details/84029924https://blo…

二、数据缓存

文章目录数据缓存1.标准缓存流程2.缓存更新一致性3.缓存穿透解决方案缓存空对象布隆过滤器4.缓存雪崩解决方案5.缓存击穿解决方案互斥锁逻辑过期6.使用函数式接口封装工具类学习 黑马点评项目整理总结: https://www.bilibili.com/video/BV1cr4y1671t/?vd_source5f3396d3af2c39…

webpack项目配置

30.webpack——webpack5新特性&#xff08;启动、持久化缓存、资源模块、URIs、moduleIds和chunkIds、tree shaking、nodeJs的polyfill被移除、模块联邦&#xff09;_俞华的博客-CSDN博客_chunkids webpack和vite的区别 - 简书 vite介绍 &#xff5c; 与其他构建工具做比较&…

【ONE·C || 字符串和内存函数】

总言 C语言&#xff1a;字符串和内存函数使用介绍。 文章目录总言1、求字符串长度&#xff1a;strlen1.1、基本介绍1.2、演示说明1.2.1、strlen输出1.2.2、strlen返回值1.3、模拟实现strlen1.3.1、计数器写法1.3.2、递归写法1.3.3、指针-指针写法2、长度不受限制的字符串函数2.…

educoder数据结构 图 无错AC代码版

目录 第1关&#xff1a;实现图的宽度优先遍历 任务描述 相关知识 编程要求 测试说明 输入输出格式说明&#xff1a; 样例输出 Ac_Code 第2关&#xff1a;实现图的深度优先遍历 任务描述 相关知识 测试说明 输入输出格式&#xff1a; 样例输出 AC_Code 第1关&am…

2023年flag

开头总是让人那么茫然无措&#xff0c;在这里记录梳理上一年。以期找到前进的方向&#xff0c;迈开新一年的第一步&#xff0c;然后不断前行。 回顾上一年 首先想到的第一件事&#xff0c;11月换了个工作依然是Java开发10月份准备了软件工程中级考试并考过读了几本技术的书籍…

【设计模式】我终于读懂了享元模式。。。

祝大家开工大吉&#x1f9e7;&#x1f9e7;&#x1f9e7;&#xff01;&#xff01;主页有红包哦 点这里 文章目录祝大家开工大吉&#x1f9e7;&#x1f9e7;&#x1f9e7;&#xff01;&#xff01;主页有红包哦 [点这里](https://blink.csdn.net/details/1469531)&#x1f9e7;…

Python基础学习 -- 进程锁

一、join函数的作用1、等子进程执行完&#xff0c;主进程再结束2、将子进程都存储到一个列表&#xff0c;每个子进程都调用一下join方法if __name__"__main__":print("我是主线程")stime.time()a[2,3,4]b[] #存储创建好的进程for i in a:pProcess(targetfu…

入门算法,这篇文章你得看!(java、算法基础、常用算法)

想用Java快速入门算法&#xff1f;这篇文章你得看&#xff01; 提示&#xff1a;本文章适合想要入门算法&#xff0c;并且想 “快速” 达到一定成果的同学们阅读~ 文章非常非常非常长&#xff08;可能是你见过最长的博客&#xff09;&#xff01;&#xff01;&#xff01; 阅读…

Authing 身份云入选《数字身份治理与管理(IGA)应用实践指南》报告

身份是物理实体映射在网络空间的一串数字代码&#xff0c;是数字世界的通行证。掌控了统一的权威数字身份就等同掌控了实体在数字空间的行为。网络业务的快速发展&#xff0c;使业务与安全深度融合到一起&#xff0c;并使数字身份成为数字化经济建设的重要基石。同一实体可以更…

【数据结构初阶】第一篇——算法性能分析

算法效率 什么是大O 时间复杂度分析 概念 大O渐进表示法 不同数据规模的差异 复杂表达式的化简 O(logn)中的log是以什么为底? 案例分析 算法为什么会超时 递归算法的时间复杂度 空间复杂度分析 概念 案例分析 递归算法的性能分析 代码的内存消耗 算法效率 算法…

如何使用VMware虚拟机(带你快速了解)

前言 &#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 一、什么是虚拟机 二、VMware的简介 1、大概介绍 2、详…

数据结构 第四章 串

她&#xff1a;点击收听 1 基本知识点 1、串中的元素是字符 2、操作的对象往往不再是单个数据元素,而是一组数据元素(子串) 3、串&#xff1a;由零个或多个字符组成的有限序列 4、子串&#xff1a;串中任意连续个字符组成的子序列 5、包含子串的串又被称为该子串的主串 6、真…

LeetCode[685]冗余连接II

难度&#xff1a;困难题目&#xff1a;在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。输入一个有向图&#xf…

Linux 笔记3

5.Linux 的网络信息5.1主机名称5.1.1临时修改&#xff1a;hostname 新名字 &#xff08;需要重新进入才能显示新名字&#xff09;reboot重启虚拟机5.1.2永久&#xff1a;vi /etc/hostname5.2DNS解析dns解析域名域名-》ipdns域名劫持&#xff1a;将域名对应的ip改掉5.2.1修改主机…

networkx学习(四)无标度网络

networkx学习(四)无标度网络 无标度网络: 对于随机网络和规则网络,度分布区间非常狭窄,大多数节点都集中在节点度均值< k >的附近,说明节点具有同质性,因此< k >可以被看作是节点度的一个特征标度。而在节点度服从幂律分布的网络中,大多数节点的度都很小,…

从零创建vue示例

从零创建vue搭建node环境创建vue项目vue项目目录介绍搭建node环境 1.下载node(node官网) 安装node一路点next即可 2.windowR—cmd ----测试一下npm -v 以及node -v 显示版本号 3.执行以下命令&#xff08;-g表示全局安装&#xff09; npm install -g vue npm install -g vue…