Redis第一章:初识

news2024/11/24 19:52:45

目录

1.1 Redis介绍

1.2 Redis 特性

1.3 Redis 使⽤场景

1.3.1 Redis 可以做什么

1.3.2 Redis 不可以做什么

1.4 安装并启动 Redis

1.5 Redis 命令⾏客⼾端


1.1 Redis介绍

        Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis 中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、 Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis 可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis 还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电 或者机器故障的时候,内存中的数据不会“丢失”。

1.2 Redis 特性

        1. 速度快

        正常情况下,Redis 执⾏命令的速度⾮常快,官⽅给出的数字是读写性能可以达到 10 万 / 秒,是什么造就了 Redis 如此 之快,可以⼤概归纳为以下三点:

        • Redis 的所有数据都是存放在内存中的,所以把数据放在内存中是 Redis 速度快的最主要原因。

        • Redis 是⽤ C 语⾔实现的,⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近,执⾏速度相对会 更快。

        • Redis 使⽤了单线程,预防了多线程可能产⽣的竞争问题。 Redis 在 6.0 版本引⼊了多线程机制,但主要也是在处理⽹络和 IO,不涉及到数据命令,即命令 的执⾏仍然采⽤了单线程模式。 

        2. 基于键值对的数据结构服务器

        Redis 中的值不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开 发,同时也能提⾼开发效率。Redis 的全称是 REmote Dictionary Server,它主要提供了 5 种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set / zet),同时在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种神奇的 ”数据结构“,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis 3.2. 版本种加⼊有关 GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种 “有意 思” 的应⽤。

3. 丰富的功能

除了 5 种数据结构,Redis 还提供了许多额外的功能:

• 提供了键过期功能,可以⽤来实现缓存。

• 提供了发布订阅功能,可以⽤来实现消息系统。

• ⽀持 Lua 脚本功能,可以利⽤ Lua 创造出新的 Redis 命令。

• 提供了简单的事务功能,能在⼀定程度上保证事务特性。

• 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到 Redis,减少了⽹络的开 销。

4. 简单稳定

        Redis 的简单主要表现在三个⽅⾯。⾸先,Redis 的源码很少,早期版本的代码只有 2 万⾏左右, 3.0 版本以后由于添加了集群特性,代码增⾄ 5 万⾏左右,相对于很多 NoSQL 数据库来说代码量相对 要少很多,也就意味着普通的开发和运维⼈员完全可以 “吃透” 它。其次,Redis 使⽤单线程模型, 这样不仅使得 Redis 服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单。最后,Redis 不需要 依赖于操作系统中的类库(例如 Memcache 需要依赖 libevent 这样的系统类库),Redis ⾃⼰实现了 事件处理的相关功能。但与简单相对的是 Redis 具备相当的稳定性,在⼤量使⽤过程中,很少出现因为 Redis ⾃⾝ BUG ⽽导致宕掉的情况。

5. 客⼾端语⾔多

        Redis 提供了简单的 TCP 通信协议,很多编程语⾔可以很⽅便地接⼊到 Redis,并且由于 Redis 受 到社区和各⼤公司的⼴泛认可,所以⽀持 Redis 的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语 ⾔,例如 C、C++、Java、PHP、Python、NodeJS 等,后续我们会对 Redis 的客⼾端使⽤做详细说 明。

6. 持久化(Persistence)

        通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢 失,因此 Redis 提供了两种持久化⽅式:RDB AOF,即可以⽤两种策略将内存的数据保存到硬盘中 ,这样就保证了数据的可持久性,后续我们将对 Redis 的持久化进⾏详细说明。

7. 主从复制(Replication)

        Redis 提供了复制功能,实现了多个相同数据的 Redis 副本(Replica),复制 功能是分布式 Redis 的基础。后续我们会对 Redis 的复制功能进⾏详细演⽰。

8. ⾼可⽤(High Availability)和分布式(Distributed)

         Redis 提供了⾼可⽤实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障⾃动转移。也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性。


1.3 Redis 使⽤场景

1.3.1 Redis 可以做什么

1. 缓存(Cache) 

        缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能 够有效地降低后端数据源的压⼒。Redis 提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和 内存溢出后的淘汰策略。可以这么说,⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。

2. 排⾏榜系统

        排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照 各种复杂维度计算出的排⾏榜,Redis 提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很 ⽅便地构建各种排⾏榜系统。

3. 计数器应⽤

        计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的 实时性,每⼀次播放和浏览都要做加 1 的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑 战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。

4. 社交⽹络

        赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量 通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对⽐ 较容易地实现这些功能。

5. 消息队列系统

        消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等 特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是 对于⼀般的消息队列功能基本可以满⾜


1.3.2 Redis 不可以做什么

        实际上和任何⼀⻔技术⼀样,每个技术都有⾃⼰的应⽤场景和边界,也就是说 Redis 并不是万⾦ 油,有很多合适它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷 热的⻆度来进⾏分析。

  • 站在数据规模的⻆度看,数据可以分为⼤规模数据和⼩规模数据,我们知道 Redis 的数据是存放 在内存中的,虽然现在内存已经⾜够便宜,但是如果数据量⾮常⼤,例如每天有⼏亿的⽤⼾⾏为数 据,使⽤ Redis 来存储的话,基本上是个⽆底洞,经济成本相当⾼。
  • 站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为 冷数据,例如对于视频⽹站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,⽽⽤⼾的观看记录不⼀定是经常需要访问的数据,这⾥暂且不讨论两者数据规模的差异,单纯站在数据冷热的⻆度上看,视频信息属于热数据,⽤⼾观看记录属于冷数据。如果将这些冷数据放在 Redis 上,基 本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在 Redis 中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

        所以,Redis 并不是万⾦油,相信随着我们对 Redis 的逐步学习,能够清楚 Redis 真正的使⽤场 景。


1.4 安装并启动 Redis

        我们选择 5.0 版本安装,原因是 5.0 已经⽀持了⼤部分的功能特性,⽽且相⽐较于 7.0 版本,更容易进⾏安装使⽤。

        💡 Redis 的官⽅并不⽀持微软的 Windows 操作系统,因为 Redis 的许多特性都是和操作系统相 关的,所以⽀持 Windows 会增加维护成本,⽽且更重要的是⼤部分公司都在使⽤ Linux 操作 系统,⽽ Redis 在 Linux 操作系统上的表现已经得到实践的证明。当然 Redis 作为⼀款优秀 的开源技术,还是吸引到微软公司的注意,微软公司的开源技术组在 Github 上维护了⼀个 Redis 分⽀:https://github.com/MSOpenTech/redis。不过我们还是强烈建议⼤家在 Linux 上使⽤ Redis。

        如果是Centos8,yum仓库中默认的redis版本就是5,直接yum install 即可~~

        如果是Centos7,yum仓库中默认的redis版本是3系列,比较老

接下来演示Centos7的安装方法:

        1、首先安装scl源,再安装redis

yum install centos-release-scl-rh
yum install rh-redis5-redis

上述两个操作没问题的话,你的redis就安装好了

        2、创建符号连接

针对可执行程序设置符号链接

cd /usr/bin
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-sentinel ./redis-sentinel
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-cli ./redis-cli

针对配置文件设置符号链接

cd /etc/
ln -s /etc/opt/rh/rh-redis5/ ./redis

        3、修改配置文件

cd redis/
vim redis.conf

把bind修改为0.0.0.0

把protected-mode修改为no

把daemonize修改为yes

        4、设置工作目录

mkdir -p /var/lib/redis
cd redis/
vim redis.conf

 把dir 路径修改为 /var/lib/redis

      5、设置日志目录

mkdir -p /var/log/redis
cd redis/
vim redis.conf

把logfile路径修改为 /var/log/redis/redis-server.log

        6、启动redis

redis-server /etc/redis/redis.conf

如果没报错,说明redis已经启动了

连接redis

redis-cli

        7、停止redis服务

通过netstat或者ps查询redis服务器的pid,再根据pid进行kill即可

kill (你的redis进程id)


1.5 Redis 命令⾏客⼾端

redis-cli 可以使⽤两种⽅式连接 Redis 服务器

        第⼀种是交互式⽅式:通过 redis-cli -h { host } -p { port } 的⽅式连接到 Redis 服务,后续所有 的操作都是通过交互式的⽅式实现,不需要再执⾏ redis-cli 了,例如:

[root@host ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> get key
"hello"

        第⼆种是命令⽅式:⽤redis-cli -h { host } -p { port } { command } 就可以直接得到命令的返回 结果,例如:

[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 ping
PONG
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 set key hello
OK
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 get key
"hello"

        这⾥有两点要注意:

        1)由于我们连接的 Redis 服务位于 127.0.0.1,端⼝也使⽤的是默认的 6379 端⼝,所以可以省略 -h { host } -p { port }。

        2)Redis 是学习 Redis 的重要⼯具,后续的⼤量章节都是 ⽤它来做讲解。 有关 redis-cli 提供的更为强⼤的功能将在后续章节做详细介绍。 

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

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

相关文章

中小学生使用全光谱台灯对眼睛好不好?2023口碑好的护眼台灯推荐

近年来,我国青少年近视问题呈现高发性、低龄化、重度化趋势。根据国家卫健委的数据,我国儿童青少年总体近视率为53.6%。特别是在前几年疫情期间,由于观看电子屏幕时间增长、户外运动时间减少,与往年相比,我国中小学生近…

3.1 面向对象的思想

思维导图: **第3章 面向对象(上)** **目录** 1. 面向对象的思想 2. 封装性 3. 继承性 4. 多态性 **3.1 面向对象的思想** - 面向对象是一种编程思想,与现实生活中的事物和它们之间的关系相对应。 - 面向过程分析问题,通过函数实现步骤&…

安卓APP:有读写权限,却读取不到照片的怪事

这是我的: 忽然想起用京东时也碰到过:

RabbitMQ之Exchange(交换机)属性及备用交换机解读

目录 基本介绍 主要结论 备用交换机 springboot代码实战(备用交换机) 实战架构 工程概述 RabbitConfigDeal 配置类:创建队列及交换机并进行绑定 MessageService业务类:发送消息及接收消息 主启动类RabbitMq01Application…

GO 语言的并发模式你了解多少?

工作中查看项目代码,发现会存在使用 GO 语言做并发的时候出现各种各样的异常情况,有的输出结果和自己期望和设计的不一致,有的是程序直接阻塞住,更有甚者直接是程序 crash 掉。 实际上,出现上述的情况,还是…

spring6-事务

文章目录 1、JdbcTemplate1.1、简介1.2、准备工作1.3、实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 2、声明式事务概念2.1、事务基本概念①什么是事务②事务的特性 2.2、编程式事务2.3、声明式事务 3、基于注解的…

NewStarCTF2023week2-ez_sql

闭合之后尝试判断字段数,存在WAF,使用大小写绕过(后面的sql语句也需要进行大小写绕过) ?id1 Order by 5-- 测出有5列 ?id1 Order by 6-- 查一下数据库名、版本、用户等信息 ?id1Union Select database(),version(),user(),4,…

205、使用消息队列实现 RPC(远程过程调用)模型的 服务器端 和 客户端

目录 ★ RPC模型(远程过程调用通信模型)▲ 完整过程:代码演示总体流程解释:ConstantUtil 常量工具类ConnectionUtil RabbitMQ连接工具类Server 服务端Client 客户端测试结果服务端客户端 完整代码ConstantUtil 常量工具类Connecti…

CocosCreator 面试题(十一)Cocos Creator 屏幕适配

Cocos Creator 提供了多种屏幕适配的方式,以确保游戏在不同设备上能够正确显示和布局。 以下是 Cocos Creator 中常用的屏幕适配方式及其说明。 1、 Cocos Creator 项目设置中统一配置设计分辨率和屏幕适配 在同一个项目里的多个 Canvas 的设计分辨率仍然采用同一…

2023年中国改性ABS树脂产能、产量及市场规模分析[图]

ABS树脂是由丙烯腈(Acrylonitrile)、丁二烯(Butadiene)和苯乙烯(Styrene)三种单体共聚而成的热塑性聚合物,是介于通用塑料和工程塑料之间的一种高分子材料,是五大合成树脂之一。随着…

USB转串口芯片GP232RL 完全兼容替代FT232RL SSOP28

GP232RL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空 间,将RS232接口转换为USB接口 。GP232RL包括一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异…

优雅而高效的JavaScript——扩展运算符

😗博主:小猫娃来啦 😗文章核心:优雅而高效的JavaScript——扩展运算符 文章目录 什么是扩展运算符扩展运算符的定义扩展运算符的作用 扩展运算符在数组中的应用数组的展开数组的合并数组的复制数组的解构赋值 扩展运算符在对象中的…

IDEA创建项目失败提示 Failed to create directory 或 “项目初始化失败”

基本只有一个原因,IDEA对该文件夹操作没有权限 比如你把项目建在了C盘的User文件夹下,User是系统盘,不要乱在里面搞东西 其他教程也许有可能教你文件夹开放权限的方法 但我个人建议,换个普通的文件夹创建项目即可 或者新建个文件…

【计算机毕业设计】python学生成绩补考通知管理系统

经过分析和研究,基于Web的学生成绩管理系统主要包括学生信息管理模块,学生成绩管理模块,学生班级管理模块,学生课程管理模块和系统管理模块。其中信息管理包括信息的浏览和处理,成绩管理包括成绩查询和处理&#xff0c…

【C语言】结构体+位段+枚举+联合(2)

大家好,我是苏貝,本篇博客带大家了解结构体和位段以及枚举,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 这是这个系列的第二篇,上一篇详细介绍了结构体的基本知识,详情…

基于SSM的高校疫情管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

HTML 核心技术点基础详细解析以及综合小案例

核心技术点 网页组成 排版标签 多媒体标签及属性 综合案例一 - 个人简介 综合案例二 - Vue 简介 02-标签语法 HTML 超文本标记语言——HyperText Markup Language。 超文本:链接 标记:标签,带尖括号的文本 标签结构 标签要成…

python基于协同过滤算法商品商城购物推荐系统vue

随着移动互联网的普及,电子商务的发展也引来了新一轮的发展,越来越手动消费者的喜爱,网络经济的发展对国家经济的发展也带来了很大的利好,带动了很多实体经济的转型,用户可以通过网络可以买到自己称心如意的商品&#…

Windows提权方法论

Windows提权方法论 1.溢出漏洞提权2.计划任务提权3.SAM文件提权4.启动项提权5.不带引号的服务路径提权 1.溢出漏洞提权 溢出提权攻击的基本原理是,通过向目标系统发送过长的输入数据,超出了程序所分配的缓冲区大小,导致溢出。攻击者可以利用…

如何理解BFC、开启BFC、BFC解决哪些问题

1.BFC 概念 BFC 英文名为 Block Formatting Context (块级格式化上下文) 具体可查看 MDN 2.BFC的作用 元素开启BFC后,子元素不会发生margin塌陷问题元素开启BFC后,子元素浮动,元素不发生高度塌陷元素开启BFC后,该元素不被其他元…