Redis入门到精通

一、Redis缓存框架基本介绍

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis的官网

市面上主流的Key-Value数据库有:Redis、Memcache、Tair(淘宝自研发)

1.1Redis的应用场景

  1. Token令牌的生成
  2. 短信验证码Code
  3. 缓存查询数据
  4. 网页计数器
  5. 分布式锁
  6. 延迟操作

二、Redis的安装方式

2.1Windows操作系统安装Redis

注意:Redis官方是没有windows版本的,只有linux,这时候因为 在nio中epoll只有linux操作系统独有

github下载windows版Redis

下载完成后将redis文件进行解压,并在此文件夹内的空白处按shift+鼠标右键然后点击在此处打开Powershell窗口,执行 .\redis-server.exe .\redis.windows.conf命令启动redis。

运行结果如下图所示:

此时redis就已经启动成功了,由于该方式启动为redis前台启动,所以powershell窗口不能关闭。

我们再在该文件下再打开一个powershell窗口用来查看redis是否正常运行

输入.\redis-cli.exe进入到redis中 set 1 test往redis中存入一个string类型的值,再get 1读取该值,显示如下则成功。

至此我们就完成了windows版redis的安装。

2.2Linux操作系统安装Redis

本文章是基于CentOs7安装redis版本为redis-5.0.14

2.1、下载并解压

1、 执行下面命令进行redis下载

  1. wget https://download.redis.io/releases/redis-5.0.14.tar.gz

2、 解压redis

  1. tar -zxvf redis-5.0.14.tar.gz

3、 移动redis目录,一般会将redis目录放在 /usr/local/redis目录

  1. mv redis-5.0.14 /usr/local/redis

2.2、编译安装redis

1、 进入redis安装目录下并执行make命令编译redis

  1. cd /usr/local/redis && make

若redis在执行make命令时报错:cc 未找到命令,原因是虚拟机系统中缺少gcc,执行下面命令安装gcc:

  1. yum -y install gcc automake autoconf libtool make

若redis在执行make命令时报错:致命错误:jemalloc/jemalloc.h: 没有那个文件或目录,则需要在make指定分配器为libc。执行下面命令即可正常编译:

  1. cd /usr/local/redis && make MALLOC=libc

make命令执行完,redis就编译完成了。

2、 执行下面命令安装redis,并指定安装目录

  1. cd /usr/local/redis && make install PREFIX=/usr/local/redis

至此我们就完成了Linux操作系统下redis的安装。

2.3、 启动Redis

1、 进入到redis的安装目录,并执行下面命令启动redis服务

  1. cd /usr/local/redis
  2. ./bin/redis-server redis.conf

此时,可以看到redis服务被成功启动。

但该方式启动有一个比较严重的问题,不能退出控制台,如果退出控制台,redis服务也会停止。若想redis以后台的方式运行,则需修改redis的配置文件redis.conf。将该配置文件中的 daemonize yes。修改完成后再次启动redis。

启动结果如下图所示。

验证redis是否可用可参考windows验证流程。

2.4、设置Redis账号密码

搜索:# requirepass foobared

requirepass 123456

客户端连接:auth 123456

2.5、设置Reids允许ip访问

注释掉bind 127.0.0.1或改为bind 0.0.0.0

protected-mode no ###允许外界访问

三、Docker容器化部署redis

docker容器安装请参考https://blog.csdn.net/qq_39142743/article/details/123483590中的docker安装部分内容。

3.1、创建数据和配置存放目录

  1. # 创建 redis 配置存放目录
  2. mkdir -p /docker/redis/conf && chmod 775 /docker/redis/conf
  3. # 创建 redis 数据存放目录
  4. mkdir -p /docker/redis/data && chmod 775 /docker/redis/data

3.2、 修改Redis配置文件

下载配置文件

  1. # 进入 redis 配置文件目录
  2. cd /docker/redis/conf
  3. # 下载 redis 示例配置文件
  4. wget http://download.redis.io/redis-stable/redis.conf

编辑配置文件修改如下内容:

  1. # 设置 redis 连接密码
  2. requirepass 123456
  3. # 数据持久化
  4. appendonly yes
  5. # Redis key 过期事件监听
  6. notify-keyspace-events Ex

3.3、 自定义启动redis

  1. docker run -d -p 6379:6379 \
  2. --name redis \
  3. --restart=always \
  4. -v /docker/redis/data:/data \
  5. -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf \
  6. -v /docker/redis/downloads:/usr/Downloads \
  7. redis:5.0.14 \
  8. redis-server /etc/redis/redis.conf \
  9. --appendonly yes

redis 安装完成后通过docker ps命令查看状态如下

3.4、验证redis是否安装成功

1、Redis交互终端

  1. # 在容器 redis 中开启一个交互终端
  2. docker exec -it redis /bin/bash

若get时,提示(error) NOAUTH Authentication required. 则需要输入密码auth 密码

四、Redis单线线程模型

首先Redis官方是没有Windows版本的,只有Linux版本。

Redis的底层采用Nio中的多路IO复用的机制,能够非常好的支持这样的并发,从而保证线程安全问题;

Redis单线程,也就是底层采用一个线程维护多个不同的客户端io操作。

但是Nio在不同的操作系统上实现的方式有所不同,在我们windows操作系统使用select实现轮训时间复杂度是为o(n),而且还存在空轮训的情况,效率非常低, 其次是默认对我们轮训的数据有一定限制,所以支持上万的tcp连接是非常难。

所以在linux操作系统采用epoll实现事件驱动回调,不会存在空轮训的情况,只对活跃的 socket连接实现主动回调这样在性能上有大大的提升,所以时间复杂度是为o(1)

注意:windows操作系统是没有epoll,只有linux系统才有epoll

所以Nginx、redis都能够支持非常高的高并发,最终都是linux中的IO多路复用机制Epoll。

redis底层采用了nio epoll实现。

Redis入门到精通01的更多相关文章

  1. SCRM从入门到精通01

    [SCRM从入门到精通01]如何基于微信开放接口开发企业的微信CRM? 业内一直都在传说微信是天生的CRM,可是没有人看到过微信CRM的真容.随着微信最新公众平台的改版和开放接口的微信认证开放,微信C ...

  2. redis入门到精通系列(四):Jedis--使用java操作redis详解

    (一)前言 如果不把数据库和后端语言联系起来,就起不到数据库应该要起到的作用.Java语言通过JDBC操作mysql,用Jedis操作redis.当然了,java操作redis的方式不止jedis一种 ...

  3. redis入门到精通系列(二):redis操作的两个实践案例

    在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...

  4. redis入门到精通系列(三):key的通用操作和redis内部db的通用操作

    五种数据类型都用到了key,key本身是一种字符串,通过key可以获取redis中保存的对象.这一篇博客就将介绍key的通用操作. (一)key基本操作 删除key del key key是否存在 e ...

  5. redis入门到精通系列(一)

    (一)为什么要用Nosql 如果你是计算机本科学生 ,那么一定使用过关系型数据库mysql.在请求量小的情况下,使用mysql不会有任何问题,但是一旦同时有成千上万个请求同时来访问系统时,就会出现卡顿 ...

  6. redis入门到精通系列(九):redis哨兵模式详解

    (一)哨兵概述 前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave.现在有这样一种情况,master宕机了,这时系统会选择一台slave作为m ...

  7. redis入门到精通系列(八):redis的高可用--主从复制详解

    (一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...

  8. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  9. redis入门到精通系列(六):redis的事务详解

    (一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...

随机推荐

  1. 通过实例程序验证与优化谈谈网上很多对于Java DCL的一些误解以及为何要理解Java内存模型

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  2. 通过配置文件(.htaccess)实现文件上传

    一·什么是服务器配置文件.htaccess 许多服务器还允许开发人员在各个目录中创建特殊的配置文件,以便覆盖或添加一个或多个全局设置.例如,Apache 服务器将从一个名为(.htaccess如果存在 ...

  3. 《计算机组成原理/CSAPP》网课总结(二)——编译原理基础

    这部分是四月份的安排,拖到五一放假了,主要是对源码编译过程的一次总结,总的来说,大致可分为预编译.编译.汇编和链接四部分.这里简单记录一下: 一 概述 1.预处理 或者说是预编译,指的是在编译前需要做 ...

  4. 一个登录点两个逻辑漏洞-edusrc

    最近呢, 也是基础漏洞学的差不多了, 就在edusrc上面实战, 刚开始搞一些信息泄漏啥的, 提交了十几个, 结果就他娘的通过了一个. 咱也就不碰信息泄漏了, 没得意思. 关于这个学校测试时也是有坑的 ...

  5. SQL连接查询优化[姊妹篇.第五弹]

    上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析. 接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨.篇 ...

  6. Centos7 安装 MPICH

    查看官网版本 https://www.mpich.org/downloads/ 最新的stable release是mpich 4.0.2,复制下载链接. 安装依赖 mpich需要系列依赖,如果不确定 ...

  7. Hadoop进程理解

    进程理解 HDFS相关进程理解(NN,DN,SSN) NameNode中存放的是数据文件与元数据的映射信息,数据文件和block快的映射信息,block块和DataNode的映射信息,前两者存放在磁盘 ...

  8. vue同时监听多个参数变化

    computed: { // 同时监听多个参数 toWatch() { const { params1, params2 } = this.observeObj; return { params1, ...

  9. Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景

    在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...

  10. 盘点微信小程序跨页面传值的若干方式

    直接给大家上干货 1.跳转页面传递参数 pageA.wxml <button type="primary" bindtap="jumpTo">点击跳 ...