Redis之快速入门
目录
简介
什么是Redis
特点
优势
数据库对比
应用场景
安装与配置
下载
上传解压
安装gcc
编译
查看安装目录
后端启动
测试
系统服务配置
Redis数据类型
通过命令操作Redis
String(字符串)
Hash(哈希)
List(列表)
Set(集合)
简介
什么是Redis
Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。
NoSQL = Not Only SQL 不仅仅是SQL,非关系型数据库
Redis 遵守 BSD 协议,实现了免费开源,其最新版本是 7.0+,常用版本包括 3.0 、4.0、5.0、6.0。自 Redis 诞生以来,它以其超高的性能、完美的文档和简洁易懂的源码广受好评,国内外很多大型互联网公司都在使用 Redis,比如腾讯、阿里、Twitter、Github 等等。
提示:Redis官网(Redis - The Real-time Data Platform)提供了完善的社区环境、文档说明,以及更新支持。
常见的内存型数据库,除 Redis 之外,还有 Oracle Berkeley DB(甲骨文旗下的一款产品)、SQlite(轻量级内存数据库)、Memcache(键值型分布式缓存数据库)、Altibase(基于内存的高性能数据库)。
特点
Redis 不仅可以将数据完全保存在内存中,还可以通过磁盘实现数据的持久存储;
Redis 支持丰富的数据类型,包括 string、list、set、zset、hash 等多种数据类型,因此它也被称为“数据结构服务器”;
Redis 支持主从同步,即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;
Redis 支持多种编程语言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等语言。
与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默认使用 0 库)。在同一个库中,key 是唯一存在的、不允许重复的,它就像一把“密钥”,只能打开一把“锁”。键值存储的本质就是使用 key 来标识 value,当想要检索 value 时,必须使用与 value 相对应的 key 进行查找。
Redis 数据库没有“表”的概念,它通过不同的数据类型来实现存储数据的需求,不同的数据类型能够适应不同的应用场景,从而满足开发者的需求。
单线程的Redis为什么这么快呢?
Redis 的底层是一个单线程模型,单线程指的是使用一个线程来处理所有的网络事件请求,这样就避免了多进程或者多线程切换导致的 CPU 消耗,而且也不用考虑各种锁的问题。虽然是单线程,但可以开多实例弥补
Redis 为了充分利用单线程,加快服务器的处理速度,它采用 IO 多路复用模型来处理客户端与服务端的连接,这种模型有三种实现方式,分别是 select、poll、epoll。Redis 正是采用 epoll 的方式来监控多个 IO 事件。当客户端空闲时,线程处于阻塞状态;当一个或多个 IO 事件触发时(客户端发起网路连接请求),线程就会从阻塞状态唤醒,并同时使用epoll
来轮询触发事件,并依次提交给线程处理。
注意:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路 IO 复用技术可以让单个线程高效的处理多个连接请求。
优势
性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;
命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
数据库对比
Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。
我们知道,数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比:
名称 | 类型 | 数据存储选项 | 附加功能 |
---|---|---|---|
Redis | 基于内存存储的键值非关系型数据库 | 字符串、列表、散列、有序集合、无序集合 | 发布与订阅、主从复制、持久化存储等 |
Memcached | 基于内存存储的键值缓存型数据库 | 键值之间的映射 | 为提升性能构建了多线程服务器 |
MySQL | 基于磁盘的关系型数据库 | 每个数据库可以包含多个表,每个表可以包含多条记录; 支持第三方扩展。 | 支持 ACID 性质、主从复制和主主复制 |
MongoDB | 基于磁盘存储的非关系文档型数据库 | 每个数据库可以包含多个集合,每个集合可以插入多个文档 | 支持聚合操作、主从复制、分片和空间索引 |
Redis 基于内存来实现数据的存储,因此其速度非常快。但是我们知道,计算机的内存是非常珍贵的资源,所以 Redis 不适合存储较大的文件或者二进制数据,否则会出现错误,Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB。
总得来说,上述数据库各有优势,当我们选用数据库时,也要因地制宜,选择一款与业务场景最相符合的数据库。
应用场景
缓存:合理的使用 缓存 能够明显加快访问的速度,同时降低数据源的压力。这也是
Redis
最常用的功能。Redis
提供了 键值过期时间(EXPIRE key seconds
)设置,并且也提供了灵活控制 最大内存 和 内存溢出 后的 淘汰策略。排行榜:每个网站都有自己的排行榜,例如按照 热度排名 的排行榜,发布时间 的排行榜,答题排行榜 等等。
Redis
提供了 列表(list
)和 有序集合(zset
)数据结构,合理的使用这些数据结构,可以很方便的构建各种排行榜系统。计数器:计数器在网站应用中非常重要。例如:点赞数加
1
,浏览数 加1
。还有常用的 限流操作,限制每个用户每秒 访问系统的次数 等等。Redis
支持 计数功能(INCR key
),而且计数的 性能 也非常好,计数的同时也可以设置 超时时间,这样就可以实现限流。社交网络:赞/踩,粉丝,共同好友/喜好,推送,下拉刷新等是社交网站必备的功能。由于社交网站 访问量通常比较大,而且传统的数据库 不太适合保存这类数据,
Redis
提供的 数据结构 可以相对比较容易实现这些功能。消息队列:
Redis
提供的 发布订阅(PUB/SUB
)和阻塞队列 的功能,虽然和专业的消息队列(RocketMQ/RabbitMQ,MQ全称:Message Queue)比,还不够强大,但对于一般的消息队列功能基本满足。
安装与配置
下载
进入redis官网下载对应版本的Redis服务,这里使用的是redis-6.2.1。
上传解压
将下载的redis-6.2.1.tar.gz压缩包上传至服务器。
# 切换目录 cd /usr/local/mytools # 上传 rz redis-6.2.1.tar.gz # 解压 tar -zxf redis-6.2.1.tar.gz -C /usr/local
安装gcc
yum -y install gcc
编译
将当前目录改为: /usr/local/redis
make && make install
查看安装目录
cd /usr/local/bin
目录介绍:
redis-benchmark:性能测试工具,可以在自己本子允许,看看自己本子性能如何
redis-check-aof:修复有问题的AOF文件
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:redis集群使用
redis-server:redis服务器启动命令
redis-cli:客户端,操作入口
后端启动
使用vi或者vim命令修改/usr/local/redis-6.2.1/redis.conf
中的配置,将后台启动设置daemonize改为yes,如下:
daemonize yes
启动redis
redis-server /usr/local/redis-6.2.1/redis.conf
查看进程
ps -ef | grep redis
关闭redis服务
# 方式一: kill -9 pid # 方式二: redis-cli shutdown
测试
执行 redis-cli 即可进入redis命令窗口,然后就可以执行redis命令了。
[root@localhost bin]# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> exit
系统服务配置
# 切换到指定目录
cd /usr/lib/systemd/system/
# 上传redis.service服务文件
rz redis.service
修改redis.service配置:
[Unit] Description=Redis After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking #修改redis-server和redis.conf的路径 ExecStart=/lky/redis-5.0.0/src/redis-server /lky/redis-5.0.0/redis.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
重载、自启动及启停服务
# 重载服务 systemctl daemon-reload # 自启动服务 systemctl enable redis # 禁用自启动服务 systemctl disable redis # 启动服务 systemctl start redis # 停止服务 systemctl stop redis # 重启服务 systemctl restart redis
Redis数据类型
Redis默认端口6379,默认16个数据库,类似数组的下标从0开始,初始默认使用0号。可使用select命令切换数据库:
select index
-
String(字符串)
String 是 Redis 最基本的数据类型。字符串是一组字节,在 Redis 数据库中,字符串具有二进制安全(binary safe)特性,这意味着它的长度是已知的,不由任何其他终止字符决定的,一个字符串类型的值最多能够存储 512 MB 的内容。
-
Hash(哈希表)
Redis hash是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似于java里面的Map<String,Object>
-
List(列表)
Redis List 中的元素是字符串类型,其中的元素按照插入顺序进行排列,允许重复插入,最多可插入的元素个数为 2^32 -1 个(大约40亿个),可以添加一个元素到列表的头部(左边)或者尾部(右边)。
-
Set(集合)
Redis Set 是一个字符串类型元素构成的无序集合。在 Redis 中,集合是通过哈希映射表实现的,所以无论是添加元素、删除元素,亦或是查找元素,它们的时间复杂度都为 O(1)。
-
Zset(有序集合)
Redis zset 是一个字符串类型元素构成的有序集合,集合中的元素不仅具有唯一性,而且每个元素还会关联一 个 double 类型的分数,该分数允许重复。Redis 正是通过这个分数来为集合中的成员排序。
通过命令操作Redis
String(字符串)
set key #保存 get key #获取 type key #查看类型 keys *或keys key #查看所有或者指定的key
Hash(哈希)
hset key field1 value1 [field2 value2] #同时将多个field-value设置到哈希表key中 hget key field #获取指定的字段值 hdel key field #删除指定的字段值 hgetall key #查询指定key的所有字段 hexists key field #查询指定key中的字段是否存在 hlen key #获取指定key中的长度
List(列表)
lpush key value1 value2 value3 #将一个或多个值插入到列表头部 llen key #获取列表的长度 lindex key index #根据索引获取列表中的元素 lrange key start stop #查看指定范围内的元素
Set(集合)
sadd key value1 [value2] #向集合添加一个或多个元素 scard key #获取集合中的元素数量 sscan key cursor [MATCH pattern] [COUNT count] #迭代集合中的元素 exists key #是否存在
相关文章:

Redis之快速入门
目录 简介 什么是Redis 特点 优势 数据库对比 应用场景 安装与配置 下载 上传解压 安装gcc 编译 查看安装目录 后端启动 测试 系统服务配置 Redis数据类型 通过命令操作Redis String(字符串) Hash(哈希) List…...

mac 安装Arthas
mac安装有两种方式 1.第一步安装Arthas 第一种: curl -L https://arthas.aliyun.com/install.sh | sh 第二种jar包形式 curl -O https://arthas.aliyun.com/arthas-boot.jar个人比较推荐第一种因为运行测试成功了 第一种安装后可能会出现一些命令不符合 需…...

创客匠人老蒋:流量是个伪命题,做好这件事是打造IP最好避坑方式
怎么样做好一个创始人的IP?流量低是否可以与创客合作陪跑服务? 在老蒋创客圈第63期对话标杆直播连麦中,老蒋与受邀嘉宾【惢众身心成长家园平台】创办人王辉老师进行了一场深度且具有启发性的交流。 老蒋指出,打造IP不仅要“做自己…...

销售预测数据挖掘实战V2.0
1、概述 沃尔玛全年都会举办几次促销减价活动。这些减价活动都是在重要节假日之前进行的,其中最大的四个节假日是超级碗、劳动节、感恩节和圣诞节。包括这些节假日在内的几周在评估中的权重是非节假日周的五倍。在缺乏完整/理想历史数据的情况下,对这些…...

【K8s】Java项目部署时为什么要用k8s?
目录 重要意义一、高可用性与弹性伸缩二、简化部署与管理三、资源隔离与安全四、容器编排与服务发现 部署步骤准备工作创建 Docker 镜像将镜像推送到镜像仓库创建 Kubernetes 资源对象部署到 Kubernetes 集群 常见问题 在 Java 项目部署中使用 Kubernetes(k8s&#…...

【Python】AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘
【Python】成功解决AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘ 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博…...

SQL注入(cookie、base64、dnslog外带、搜索型注入)
目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析? UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master,靶场资源文件已上传,如有需要请前往主页或以下链接下载 信安必备…...

GPT-4:揭秘人工智能新纪元
GPT-4,是OpenAI推出的最新一代语言模型,它的出现不仅在AI技术领域引起了广泛关注,更是在全球范围内掀起了一场关于人工智能未 来的热烈讨论。本文将详细探讨GPT-4的技术突破、应用前景,以及它对社会和科技发展的深远影响。 GPT-4…...

Taro 框架 React Native 开发
1、生命周期 参考:React Native组件(一)组件的生命周期_reactnative constructor介绍-CSDN博客 1.1构造函数(constructor) 1、第一个语句必须是super(props)。 2、contructor将在任意一个RN组件被加载之前优先调用,并且只会调…...

学会平衡日常编码工作与提升学习
文章目录 一、前言二、平衡工作和学习的方法和技巧2.1 设定明确的学习目标2.2 制定合理的学习计划2.3 高效工作1. 代码复用2. 模块化设计3. 单元测试与自动化测试4. 代码审查与反馈 2.4 利用碎片时间2.5 利用在线资源2.6 保持好奇心和持续学习的心态2.7 定期评估和调整2.8 保持…...

navicate premium16破解
下载链接:https://pan.baidu.com/s/1BWowOJLYchFcRMgIn-j97A?pwdvmfu 双击安装navicat160_premium_cs_x64.exe,安装完不要打开 然后断网打开NavicatCracker.exe 打开如果报病毒按照下面方法处理: 记得一定要断网,不断网…...

Kafka运行机制(一):Kafka集群启动,controller选举,生产消费流程
前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501 1. Kafka集群启动 Kafka在启动集群中的各个broker时,broker会向controller注册自己,并且从controller节点同步集群元数据。 broker是Kaf…...

安徽医科大学:利用UKB数据库和孟德尔随机化,研究发表更轻松!
UKB数据库联合孟德尔随机化 睡眠质量和肾功能竟然与一种严重的肝病密切相关!今天,和大家分享一篇文章,这篇文章深入探讨了睡眠参数和肾功能在新发严重代谢功能障碍相关脂肪性肝病(MASLD)中的机制作用。 通过这篇文章&…...

Ubuntu安装gdb出现错误的问题解决,DNS解析错误导致的安装失败
目录 一、问题 1、错误现象 2、初步分析 二、问题分析和处理 1、进一步确定问题 2、解决dns问题 (1)查看 dns解析文件 (2)修改namesever (3)测试系统 三、问题解决 1、问题进一步分析 …...

【Redis】解析Redisson 限流器源码
Redisson 一、注解AOP 代码部分提取二、设置限流器的失效时间 一、注解AOP 代码部分提取 // 调用Reids工具类的rateLimiter 方法long number RedisUtils.rateLimiter(combineKey, rateType, count, time);redis 工具类 public class RedisUtils {private static final Redis…...

docker-harbor 私有仓库部署和管理
harbor 开源的企业级的docker仓库软件。 仓库:私有仓库(用的最多) 公有仓库。 harnor是有图形化的,页面UI展示的一个工具。操作起来很直观。 harnor每个组件都是由容器构建的,所以安装harbor必须要有docker。 doc…...

机器学习笔记二-回归
回归是统计学和机器学习中的一种基本方法,用于建模变量之间的关系,特别是用一个或多个自变量(输入变量)来预测一个因变量(输出变量)的值。回归分析广泛应用于预测、趋势分析和关联研究中。根据目标和数据的…...

判断http链接中文件是否存在
最近项目遇到需要从http请求下载文件到服务器,下载前需要判断下http中的文件是否存在。如果判断本地服务器上文件是否存在,用file.exists来判断。但是这个方法却无法判断http中文件是否存在。 如果要判断http文件是否存在,用如下代码…...

Flink CDC (session模式)
1、 # Start YARN session ./bin/yarn-session.sh --detached 2、配置文件: rest.bind-port: {{REST_PORT}} rest.address: {{NODE_IP}} execution.target: yarn-session yarn.application.id: {{YARN_APPLICATION_ID}} 3、mysql-doris.yml source:type: mysql…...

下载ISO镜像的方法 Debian、Red Hat 、CentOS、Ubuntu、Kali Linux
目录 Debian Red Hat CentOS Ubuntu Kali Linux Debian 下载步骤: 访问Debian的官方网站:Debian官网。在网站上找到“Downloads”或类似的下载链接。选择适合你的计算机架构(如amd64、i386等)的Debian版本。点击下载ISO镜像…...

想学接口测试,不知道那个工具适合?
接口测试是软件测试中的一项重要任务,它主要关注系统的不同组件之间的数据交换和通信。接口测试是一种黑盒测试方法,它可以帮助我们验证系统的功能和性能是否达到预期,并且确保不同组件之间的消息传递是正确的。在接口测试过程中,…...

干货分享 | TSMaster—RP1210模块使用指南
RP1210是由技术和维护委员会(TMC)编写的一种建议性实践。RP1210用于对重型车辆射频相关的(主要针对)电子控制单元(ECU)进行二次编程和分析。本文主要针对TSMaster—RP1210模块的操作进行详细介绍。 本文关…...

一步解决Ubuntu中无法使用git clone的问题
在网上找了很多教程都无法解决,最后用了一行命令成功解决 git config --global url."https://github.com".insteadOf git://github.com输入这行命令,之后就可以使用git clone了...

c++的时间复杂度
前言 Hello,大家好我是文宇. 最近没怎么写文章了,写个教程吧. 正文 C是一种高级编程语言,用于开发各种类型的应用程序,包括计算机科学中的算法和数据结构。在编写代码时,了解算法和数据结构的时间复杂度非常重要,因为它可以帮…...

PDF转图片 JAVA
前言 以下是一个使用 Apache PDFBox 将 PDF 文件转换为图片的封装方法。这个方法将会把 PDF 的每一页转换为一张图片,并保存到指定的目录中。 1.添加依赖 首先,你需要在项目中添加 PDFBox 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添…...

树莓派5 笔记26:ollama大型语言模型_中文输入法_Python_espeak文字转语音
今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 下载大语言模型,下载中文输入法&#…...

【kubernetes】k8s安全机制
Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。 比如 kubectl 如果想向 API Server…...

Android T(13) The app is granted permissions by default
我的博客 对比Android11,frameworks\base\services\core\java\com\android\server\pm\permission文件夹下,多了个PermissionManagerServiceImpl.java. 有一部分关于权限的处理,移到了这个文件中.比如:restorePermissionState(…) all app granted permissions by default b/fr…...

4 - Linux远程访问及控制
目录 一、SSH远程管理 1. SSH概述 2.SSH的优点 3.配置OpenSSH客户端 4.sshd服务支持的两种验证方式 5. 使用SSH客户端程序 5.1 ssh - 远程登录 5.2 scp - 远程复制 6.配置密钥对验证 二、TCP Wrappers访问控制 1.TCP Wrappers 概述 2. TCP Wrappers 机制的基本原则 …...

如何使用AWS EC2资源?
随着云计算技术的迅速发展,越来越多的企业和个人选择将工作负载迁移到云端,以获取灵活性、可扩展性和成本效益。作为全球领先的云计算服务提供商,AWS为用户提供了丰富的服务,其中最受欢迎的之一是云服务器EC2。本文中九河云将探讨…...