Redis从入门到精通(一)Redis安装与启动、Redis客户端的使用

文章目录

  • 写在最前
  • 第1章 Redis概述
    • 1.1 初识Redis
      • 1.1.1 NoSQL
      • 1.1.2 Redis的特点与优势
    • 1.2 安装Redis
      • 1.2.1 安装依赖库
      • 1.2.2 安装Redis
      • 1.2.3 启动Redis
        • 1.2.3.1 默认启动
        • 1.2.3.2 指定配置启动
        • 1.2.3.3 开机自启
    • 1.3 Redis客户端
      • 1.3.1 命令行客户端
      • 1.3.2 图形化桌面客户端
      • 1.3.3 编程客户端
    • 1.4 小结

写在最前

工作中开发的几个项目,几乎都用到了Redis,但是呢我发现我也只是会简单地存储数据、取出数据,至于性能怎么样?如何由数据库0切换到其他的15个数据库(Redis分为16个数据库),一概不知。所以我就想着要对Redis系统深入地学习一下。

网络上其实有非常多的学习资料,经过比较,我最终选定的资料包括:

  • 网站:黑马程序员-Redis入门到精通 http://yun.itheima.com/course/994.html?capid=1$javaeezly
  • 网站:Redis官方文档 https://redis.io/docs/
  • 网站:桌面可视化工具 https://github.com/qishibo/AnotherRedisDesktopManager/releases/tag/v1.6.3

下面就开始Redis的学习吧!

第1章 Redis概述

1.1 初识Redis

Redis是一种键值型的NoSQL数据库。 这里有两个关键词:

  • 键值型
  • NoSQL

其中,键值型是指Redis中存储的数据都是以key-value对的形式存储的,key只能是字符串,而value的形式多种多样,可以是字符串、数值、json等。

1.1.1 NoSQL

NoSQL可以翻译为Not Only SQL(不仅仅是SQL),或者No SQL(非SQL)。它是相对于关系型数据库而言的,泛指非关系型数据库。

关系型数据库和非关系型数据库有很大的差异,主要包括7个方面:

  • 1)数据结构

    • 关系型数据库是结构化数据,每一张表都有严格的约束信息,例如规定字段的数据类型、长度、是否为空、是否为主键等等,插入的数据必须遵守这些约束;

    • 非关系型数据库则对数据库格式没有严格约束,可以是键值型、文档型,甚至是图格式。

  • 2)数据关联

    • 关系型数据库的表与表之间往往存在关联,例如外键:

    • 非关系型数据库则不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合。

  • 3)查询方式

    • 关系型数据库会基于SQL语句做查询,语法有统一标准

    • 非关系型数据库则语法差异很大,不同数据库之间语法不一样。

  • 4)事务特性

    • 关系型数据库能满足事务ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),它们是数据库事务处理的四个基本特性。

    • 非关系型数据库则往往不支持事务,或者不能严格保证ACID特性,只能实现基本的一致性。

  • 5)存储方式

    • 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响。

    • 非关系型数据库的操作更多是依赖于内存,而内存的读写速度非常快,因此性能更好。

  • 6)扩展性

    • 关系型数据库集群模式一般是主从模式,主从数据一致,起到数据备份的作用,成为垂直扩展

    • 非关系型数据库集群模式一般是将数据进行拆分,分别存储在不同的节点上,因此可以保存海量数据,可以解决内存大小有限的问题。

1.1.2 Redis的特点与优势

Redis诞生于2009年,全称是Remote Dictionary Server(远程词典服务器),作者是Antirez,是一个基于内存的键值型NoSQL数据库。

它的特点包括:

  • 1)Redis是内存型数据库,即key-value对存储在内存中,故效率此磁盘型数据库要高。

  • 2)Redis采用单线程工作模式,即网络I/O和数据读写是由⼀个线程来完成的。

    查阅了一些资料,官方FAQ表示:
    因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
    看完其实还是不太理解,这个疑问先放着,也许在接下来的学习中也顺理成章地理解了。

  • 3)key-value对中的value值既可以是字符串,也可以是复杂的数据类型,如链表、集合、Hash表等。

  • 4)Redis支持数据持久化,可以采用RDB、AOF、RDB+AOF这3种方案。及其重启后可以从磁盘中进行数据恢复。

  • 5)Redis支持主从结构,可以利用从实例进行数据备份。

Redis支持10万以上的QPS(Queries-per-second,每秒查询率),其性能之所以高,主要原因有:

  • 1)Redis的绝大部分命令处理只是纯粹的内存操作,内存的读写速度是非常快的。

  • 2)Redis提供单线程多进程服务,避免了不必要的上下文切换,不存在加锁、释放锁等同步操作。

  • 3)Redis使用多路I/O复用模型(select、poll、epoll),可以高效处理大量并发连接。

    一会单线程,一会多进程,然后又是多路I/O、高并发,虽然知道肯定是不冲突的,但是容易混淆。跟上面一样,也不太理解,那就都先带着这个疑问吧!!

  • 4)Redis中的数据结构是专门设计的,增删改查等操作相对简单

1.2 安装Redis

此处基于Linux系统来安装Redis,Linux版本为CentOS 7,Redis版本为官网目前的最新稳定版本7.2.4。

1.2.1 安装依赖库

Redis是基于C语言编写的,因此首先需要安装gcc依赖:

yum install -y gcc tcl

1.2.2 安装Redis

使用wget命令拉取官网的最新版本Redis并解压:

wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar -zxvf redis-7.2.4.tar.gz

然后进行编译:

cd redis-7.2.4
make && make install

安装完成,默认的安装路径是/usr/local/bin

  • redis-cli:redis提供的命令行客户端。
  • redis-server:redis的服务端启动脚本。
  • redis-cli:redis的哨兵模式启动脚本。

该目录下已经默认配置到环境变量,因此可以在任意目录下运行这些命令。

1.2.3 启动Redis

Redis的启动方式有多种,包括默认启动、指定配置启动、开启启动等。

1.2.3.1 默认启动

安装完成后,在任意目录下输入redis-server命令即可启动Redis,如图:

这种方式属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL+C时,Redis也会停止。

1.2.3.2 指定配置启动

如果要让Redis以后台方式启动,则必须修改Redis配置文件,即Redis解压后目录下的redis.conf文件:

先将redis.conf配置文件备份一份:

cp redis.conf redis.conf.bak

然后修改redis.conf配置文件中的一些配置:

# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问
# 修改为0.0.0.0则可以在任意IP访问
# 注意生产环境不会设置为0.0.0.0
bind 0.0.0.0
# 监听端口,默认6379
port 6379
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis需要输入密码
requirepass 123321
# 工作目录,默认是当前目录,也就是运行redis-server命令时的目录
# 日志、持久化等文件会保存在这个目录
dir ./
# 数据库数量,设置为1代表只使用1个库,默认有16个,编号为0-15
databases 1
# 设置Redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志
logfile "redis.log"

最后,指定配置文件启动Redis:

# 进入Redis解压后目录
cd /root/redis-7.2.4
# 指定配置文件启动Redis
redis-server redis.conf

启动后,会话窗口不会有任何提示,但可以通过查看日志文件redis.log来确定是否已启动成功:

如果要停止服务,可使用以下命令:

# 利用redis-cli来执行shutdown命令,即可停止Redis服务
# 因为之前配置了密码,因此需要通过 -a 来指定密码
redis-cli -a 123321 shutdown
1.2.3.3 开机自启

也可以通过配置将Redis服务设置为开机自启,方便使用。

首先,新建一个系统服务文件:

vi /etc/systemd/system/redis.service

内容如下:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
# 根据实际解压和安装位置进行配置
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重载系统服务:

systemctl daemon-reload

完成以上配置,就可以使用以下命令来操作Redis的启停了:

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

执行下面的命令,可以让redis开机自启:

systemctl enable redis

1.3 Redis客户端

Redis安装完成,就可以操作Redis实现数据的CRUD了,这就需要使用Redis客户端。

Redis客户端包括:命令行客户端、图形化桌面客户端、编程客户端。

1.3.1 命令行客户端

Redis安装完成后,就自带了命令行客户端:redis-cli,其使用方式如下;

redis-cli [options] [commonds]

常见的options有:

  • -h 127.0.0.1:指定要连接的Redis节点的IP地址,默认是127.0.0.1。
  • -p 6379:指定要连接的Redis节点的端口,默认是6379。
  • -a 123321:指定Redis的访问密码,在配置文件redis.conf中设置。

而commonds就是Redis的操作命令,例如ping,就是与Redis服务端做心跳测试,服务端正常会返回pong

如果不指定commonds,则会进入交互控制台:

如果options中没有指定-a 123321,则进入控制台后可以使用auth 123321进行授权。

1.3.2 图形化桌面客户端

选用的是GitHub大神写的客户端,地址:https://github.com/qishibo/AnotherRedisDesktopManager/releases/tag/v1.6.3

安装后运行该客户端,界面如下:

点击左上角New Connection,创建一个新连接:

点击确定,建立连接,成功后界面会显示Redis服务端的一些基本信息,如版本、内存、状态等:

1.3.3 编程客户端

编程客户端就是通过编写代码来连接Redis。在Redis官网中,提供了各种编程语言的客户端:https://redis.io/docs/clients/。

其中Java客户端又包含Jedis和Lettuce两种:

1.4 小结

第1章到此就学习完毕了,本章的主题是:Redis概述。回顾一下本章的学习的内容:

(一)Redis介绍、Redis的安装和启动、Redis客户端

更多内容请查阅分类专栏:Redis从入门到精通

第2章主要学习:Redis数据类型和常见命令。包括:

  • Redis通用命令;
  • String类型;
  • Hash类型;
  • List类型;
  • Set类型;
  • SortedSet类型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RVM安装Ruby笔记(Mac)

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

Mysql or与in的区别

创建一个表格 内涵一千万条数据 这张表中,只有id有建立索引,且其余都没有 测试1:使用or的情况下,根据主键进行查询 可以看到根据主键id进行or查询 花费了30-114毫秒,后面30多毫秒可能是因为Mysql的Buffer Pool缓冲池的…

图论做题笔记:dfs

Leetcode - 797:所有可能的路径 题目: 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问的所有节…

深入理解数据结构(1):复杂度详解

文章主题:复杂度详解🌱所属专栏:深入理解数据结构📘作者简介:更新有关深入理解数据结构知识的博主一枚,记录分享自己对数据结构的深入解读。😄个人主页:[₽]的个人主页🔥…

Intellij IDEA / Android studio 可持续开发笔记

Intellij 的Java/安卓工具链有着一种不可持续性,这种不可持续性体现在多个方面。 首先是不可持续运行。IDEA 使用时间越长,内存占用越大,从不主动释放。运行时间越长,日志越多,从不主动清理。 然后是不完整的开源&am…

java多线程——概述,创建方式及常用方法

前言: 学习到多线程了,整理下笔记,daydayup!!! 多线程 什么是线程 线程(Thread)是一个程序内部的一条执行流程。若程序只有一条执行流程,那这个程序就是单线程的程序。 什么是多线程 多线程是指从软硬件上…

预处理详解(二)-- 条件编译 - 头文件包含 - ##和#运算符

目录 一.##和#运算符1.#运算符(字符串化)2.##运算符(粘合符) 二.条件编译(很重要)三.命名约定1.宏名的命名2.函数的命名 四.#undef(用于移除一个宏定义)五.命名行约定六.头文件被包含的方式1.本地文件包含2…

Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测) 单变量时间序列单步预测。 ELM(Extreme Learning Machine,极限学习机)和AdaBoost(Adaptive Boosting,自适应提升)都是机…

Disruptor

前言 大家好,我是jiantaoyab,这是我作为学习笔记总结应用篇最后一篇,本章大量的参考了别的博主的文章。 我们今天一起来看一个开源项目 Disruptor。看看我们怎么利用 CPU 和高速缓存的硬件特性,来设计一个对于性能有极限追求的系…

【C#】知识点速通

前言: 笔者是跟着哔站课程(Trigger)学习unity才去学习的C#,并且C语言功底尚存,所以只是简单地跟着课程将unity所用的C#语言的关键部分进行了了解,然后在后期unity学习过程中加以深度学习。如需完善的C#知识…

Python 后端 Flask 使用 Flask-SocketIO、前端 Vue3 实现长连接 Websocket 通信详细教程(更新中)

Flask 安装 Flask-Socketio Flask-SocketIO 第三方库使 Flask 应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C、Java 和 Swift 中的任何 SocketIO 客户端库或任何其他兼容客户端来建立与服务器的永久连接。 Flask-Socke…

编程语言|C语言——C语言操作符的详细解释

这篇文章主要详细介绍了C语言的操作符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一、基础 1.1 算数操作符 - * / % - * / 这些操作符是我们…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法? 缓存穿透和缓存击穿的区别? 缓存雪崩 雪崩解决办法? 如何确保缓存和数据库数据的一致性? 常见的缓存更新策略? 缓存穿透 定义:缓存穿透说…

[BT]BUUCTF刷题第11天(3.30)

第11天 Web(共3题) [网鼎杯 2018]Fakebook 打开是一个注册登录页面,包括用户、年龄和博客地址 查看题解知道存在robots.txt 访问http://c1392d44-63c3-4152-bf7e-89513eff1152.node5.buuoj.cn:81/robots.txt: User-agent: * D…

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读:又称为 "锁定读",它会读取记录的最新版本(也就是最新的提交结果),并对读取到的数据加锁,其它事务不能修改这些数据,直到当前事务提交或回滚。"sele…

python统计分析——灵敏度、特异度和ROC曲线

参考资料:python统计分析【托马斯】 1、灵敏度和特异度 灵敏度:也叫作效能。被检验正确识别出来的阳性结果(病人中有疾病且检验结果是阳性的概率)。 特异度:被检验正确识别出来的阴性结果(病人健康且检验结…

mysqldump备份数据库提示ERROR 1064 (42000): You have an error in your SQL syntax

在dos下备份数据库的时候提示上面的错误信息 1 错误详情 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near mysql-v at line 1错误示例图 2 解决办法 通过查资料…

vue2.0脚手架搭建

vue起步 文档 https://v2.cn.vuejs.org/ {{}} 变量、表达式渲染v-html html模板,渲染htmlv-model 绑定值(双向绑定)v-if 判断v-bind:href"地址" 简写:绑定属性 简写:href:"&qu…

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…

腾讯云2核2G服务器优惠价格,61元一年

腾讯云2核2G服务器多少钱一年?轻量服务器61元一年,CVM 2核2G S5服务器313.2元15个月,轻量2核2G3M带宽、40系统盘,云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图:…