【数据库Redis】Redis五种基本数据结构以及三种配置方式——默认配置、运行配置、配置文件启动

news2024/11/28 6:27:43

文章目录

  • 一、初识Redis
    • 1.1 了解Redis
    • 1.2 Redis特性
    • 1.3 Redis使用场景
      • Redis不适合场景
    • 1.4 用好Redis的建议
    • 1.5 正确安装并启动Redis
      • 在Linux上安装Redis
      • 在Windows上安装Redis
      • 配置、启动、操作、关闭Redis
        • 1)、启动Redis
        • 2)、Redis命令行客户端
        • 3)、停止Redis服务
    • 1.6 Redis重大版本

一、初识Redis

  • Redis风靡各大IT互联网公司分布式高并发系统。
  • 在大数据和移动互联网的时代,应对高并发、低延时的大型系统, Redis基本是标配组件。
  • 如何保证项目的高并发、低延时的技 术挑战,相应的互联网技术也随之发生了重大变革,NoSQL技术得到了蓬勃 的发展。
  • Redis作为基于键值对的NoSQL数据库,具有高性能、丰富的数据结 构、持久化、高可用、分布式等特性,同时Redis本身非常稳定,已经得到 业界的广泛认可和使用。

1.1 了解Redis

  • Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成。

  • Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人。

  • Redis还可以将内存的数据利 用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会丢失。

1.2 Redis特性

  • 速度快:
    Redis执行命令的速度非常快,官方给出的数字是读写性 能可以达到10万/秒。
    Redis的所有数据都是存放在内存中的,把数据放在内存中是Redis速度快的最主要原因。
    Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。
    Redis使用了单线程架构,预防了多线程可能产生的竞争问题。
**谷歌公司给出的各层级硬件执行速度**
层级速度
Ll cache reference0.5ns
Branch mispredict5ns
L2 cache reference7ns
Mutex lock/unlock25ns
Main memory reference100ns
Compress 1K bytes with Zippy3 000ns
Send 2K bytes over 1 Gbps network20 000ns
Read 1 MB sequentially from Memory250 000ns
Round trip within same datacenter500 000ns
Disk seek10 000 000ns
Read 1 MB sequentially from disk20 000 000ns
Send packet CA->Netherlands->CA150 000 000ns
  • 基于键值对的数据结构服务器:
    1、Redis的全称是: Remote Dictionary Server
    2、Redis主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。

  • 丰富的功能
    1、提供了键过期功能,可以用来实现缓存。
    2、提供了发布订阅功能,可以用来实现消息系统。
    3、支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
    4、提供了简单的事务功能,能在一定程度上保证事务特性。
    5、提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。

  • 简单稳定
    1、Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透”它。
    2、Redis使用单线程模型,这样 不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。

  • 客户端语言多
    1、Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,例如Java、PHP、Python、C、C++、Nodejs等

  • 持久化
    1、Redis提供了两种持久化方式:RDB和 AOF,即可以用两种策略将内存的数据保存到硬盘中。
    在这里插入图片描述

  • 主从复制
    1、Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。
    在这里插入图片描述

  • 高可用和分布式
    1、Redis从2.8版本正式提供了高可用实现 Redis Sentinel,它能够保证Redis 节点的故障发现和故障自动转移。
    2、Redis从3.0版本正式提供了分布式实现 Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展性。

1.3 Redis使用场景

  • 缓存:缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。

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

  • 计数器应用:Redis天然支持计数 功能而且计数的性能也非常好,可以说是计数器系统的重要选择。

  • 社交网络:由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。

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

Redis不适合场景

  • 站在数据规模和数据冷热的角度来进行分析。
    1、站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。
    2、站在数据冷热的角度看,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据。单纯站在数据冷 热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在Redis中,基本上是对于内存的一种浪费,但是对于一些热数 据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

1.4 用好Redis的建议

  • 很多使用Redis的开发者认为只要会用API开发相应的功能就可以,更有 甚者认为Redis就是get、set、del,不需要知道Redis的原理。

  • 如果不了解Redis的单线程模型,有些开发者会在有 上千万个键的Redis上执行keys*操作,如果不了解持久化的相关原理,会在一个写操作量很大的Redis上配置自动保存RDB。

1.5 正确安装并启动Redis

在Linux上安装Redis

源码方式进行安装Redis:

  • 1)下载Redis指定版本的源码压缩包到当前目录。
  • 2)解压缩Redis源码压缩包。
  • 3)建立一个redis目录的软连接,指向redis-3.0.7。
  • 4)进入redis目录。
  • 5)编译(编译之前确保操作系统已经安装gcc)。
  • 6)安装。
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar xzf redis-3.0.7.tar.gz
ln -s redis-3.0.7 redis
cd redis
make
make install
  • 第一,第3步中建立了一个redis目录的软链接,这样做是为了不把redis目录固定在指定版本上,有利于Redis未来版本升级,算是安装软件的一种好习惯。
  • 第二,第6步中的安装是将Redis的相关运行文件放到/usr/local/bin/下,这样就可以在任意目录下执行Redis的命令。例如安装后,可以在任何目录执行 redis-cli–v 查看Redis的版本。

在Windows上安装Redis

Redis的官方并不支持微软的Windows操作系统,但是Redis作为一款优秀的开源技术吸引到了微软公司的注意,微软公司的开源技术组在GitHub上维护一个Redis的分支:https://github.com/MSOpenTech/redis

配置、启动、操作、关闭Redis

Redis安装之后,src/usr/local/bin目录下多了几个以redis开头可执行文件,我们称之为Redis Shell,这些可执行文件可以做很多事情,例如可以启动和停止Redis、可以检测和修复Redis的持久化文件,还可以检测Redis的性能。

**Redis可执行文件说明**
可执行文件作用
redis-server启动Redis
redis-cliRedis命令行客户端
redis-benchmarkRedis基准测试工具
redis-check-aofRedis AOF持久化文件检测和修复工具
redis-check-dumpRedis RDB持久化文件检测和修复工具
redis-sentinel启动Redis Sentinel

1)、启动Redis

有三种方法启动Redis:默认配置、运行配置、配置文件启动。

  • 默认配置:这种方法会使用Redis的默认配置来启动。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqeuvxew-1667732591013)(https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ac33ece95501aeea98895b6897faf5ad&file=file.png)]

  • 运行配置:redis-server加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置:
    redis-server --configKey1 configValue1 --configKey2 configValue2
    redis-server --port 6380

  • 配置文件启动:将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf中,那么只需要执行如下命令即可启动Redis:
    redis-server /opt/redis/redis.conf
    Redis有60多个配置,这里只给出一些重要的配置:

配置名配置说明
port端口
logfile日志文件
dirRedis工作目录(存放持久化文件和日志文件)
daemonize是否以守护进程的方式启动Redis

2)、Redis命令行客户端

redis-cli可以使用两种方式连接Redis服务器:

  • 第一种是交互式方式:通过 redis-cli -h {host} -p {port}的方式连接到Redis服务,之后所有的操作都是通过交互的方式实现,不需要再执行redis-cli了。
redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
  • 第二种是命令方式:用 redis-cli -h {host} -p {port} {command} 就可以直接得到命令的返回结果
redis-cli -h 127.0.0.1 -p 6379 get hello
"world"
  • 如果没有-h参数,那么默认连接 127.0.0.1 ;如果没有-p,那么默认6379端口,也就是说如果-h和-p都没写就是连接 127.0.0.1:6379这个Redis实例。

3)、停止Redis服务

Redis提供了shutdown命令来停止Redis服务,例如要停掉 127.0.0.16379端口上的Redis服务,可以执行如下操作: redis-cli shutdown

  • Redis的日志输出如下:
# User requested shutdown... #客户端发出的shutdown命令
* Saving the final RDB snapshot before exiting.
# 保存RDB持久化文件(有关Redis持久化的特性在1.2节已经进行了简单的介绍,RDB是Redis的一种持久化方式)
* DB saved on disk #将RDB文件保存在磁盘上
# Redis is now ready to exit, bye bye... #关闭

当使用redis-cli再次连接该Redis服务时,看到Redis已经"失联":

$ redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused

【注意】

  • 1)Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式。
  • 2)除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的方式关闭掉Redis,但是不要粗暴地使用kill-9强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。
  • 3)shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件:redis-cli shutdown nosave|save

1.6 Redis重大版本

  • Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本。

  • Redis3.0最大的改动就是添加Redis的分布式实现Redis Cluster,填补了Redis官方没有分布式实现的空白。

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

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

相关文章

JVM(十四)—— StringTable

JVM(十四)—— StringTableString的基本特性String的内存分配字符串拼接intern方法常见面试题:到底创建了几个String对象String的基本特性 作为一名Java程序员肯定少不了和 String打交道,使用方法就是将字符串用一对""…

SpringCloud 远程调用

目录 1. SpringCloud 2. Nacos 3. 远程通信 3.1 创建公共子模块 (nacos_commons) 3.1.1 DTO对象 3.2 父项目引入子项目 (nacos_commons) 打成的jar包 3.3 父项目指向子项目 (nacos_commons) 为儿子 3.4 子项目 (nacos_provider) 3.5 子项目 (nacos_consumer) …

【Netty】九、Netty自定义协议

Netty自定义协议一、Netty自定义协议二、 协议设计三、 协议实现编码:解码:时间轮算法Netty中的时间轮一、Netty自定义协议 公有协议(http、tcp)、私有协议(自己定义的,不是行业标准) 我们知道…

[Qt]QMainWindow

目录 1.基本概述 2.菜单栏 3.工具栏 4.状态栏 5.铆接部件 6.中心部件 7.资源文件 (1)创建菜单栏,及菜单项 (2)创建工具栏 (3)创建锚接部件 (4)创建中心文件 (5)创建状态栏 1.基本概述 QMainWindow是一个为…

腾讯网关TGW基础原理入门

本文是在组内技术分享的发言稿,主要介绍 TGW 基本原理和架构,同时为了加深理解,会辅助对比 TGW 与 LVS(ipvs)的异同。 本次分享是偏基础性的 TGW 介绍,不会特别深入技术细节,目的是帮助需要用到…

算法7:迪杰斯特拉算法

目录1. 应用场景-最短路径问题2. 迪杰斯特拉(Dijkstra)算法介绍3. 迪杰斯特拉(Dijkstra)算法过程4. 算法分析过程5. 代码实现1. 应用场景-最短路径问题 看一个应用场景和问题 胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发&#xff…

贪吃蛇OneDay

环境 配置git环境 安装Git Bash(使用Mac和Linux的同学可以跳过这一步):https://gitforwindows.org/ 进入家目录生成秘钥:执行命令ssh-keygen 在Ac Git上注册账号,地址:https://git.acwing.com/ 将id_rsa.p…

Unity中的AssetBundle

AssetBundle的概念 AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包,是对Unity 初始Resources的一种扩展;一般使用的策略是把必须的资源和不需要更新的资源放在Resources文件夹下,其他的资源放在AssetBundle下面…

【微信小程序】flex布局

🏆今日学习目标:flex布局 😃创作者:颜颜yan_ ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:20分钟 🎉专栏系列:微信小程序开发 文章目录前言Flex布局什么是flex?flex-direc…

Hive中内部表、外部表、分区表、分桶表之间的关系

文章目录Hive中内部表、外部表、分区表、分桶表之间的关系1.0🚀内部表2.0👀外部表3.0🫥内部表和外部表的差异3.0🐘分区表4.0😃分桶表Hive中内部表、外部表、分区表、分桶表之间的关系 1.0🚀内部表 内部表&…

HEAD: HEtero-Assists Distillation for Heterogeneous Object Detectors

ECCV 2022 异质辅助蒸馏 Abstract Conventional knowledge distillation (KD) methods for object detection mainly concentrate on homogeneous teacher-student detectors. However, the design of a lightweight detector for deployment is often significantly differ…

计算机毕业设计(附源码)python智能仓储进出货管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【python】都2022年不会还有人不会在电脑桌面上养宠物吧~

前言 嗨喽~大家好呀,这里是魔王呐 ! 上班枯燥,对着冷冰冰的电脑,相信很多小伙伴即使摸鱼,心情也不愉快。 这时如果有个萌宠能大家进行实时互动,这该有多好呀。再无聊的工作也能增添那么一丝趣味。 今天博主就来给大…

2、Ubuntu下安装Vivado下的下载器驱动 Digilent 版本

简介 在Ubuntu下安装Vivado时,安装工具会提醒你,digilent驱动无法自动安装,需要手动安装,并且让用户参考UG973手册安装。 由于安装驱动很简单,不用麻烦大家去找手册了,这里直接给出安装方法 安装方法 …

【Pytorch Lighting】第 6 章:深度生成模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

FPGA HLS 卷积单元 数据类型hls优化约束设置

数据类型 自定义精度整形&#xff1a; ap_int<4> in1, in2; ap_int<8> concat; concat (in1, in2); // in1和in2拼起来&#xff08;按照补码拼起来&#xff09; /* 例子&#xff1a; in1 1, in2 -1 补码&#xff1a; in1 0001 in2 1001 > 11101 > 1…

Spring mvc处理异常

文章目录一、Handler ExceptionResolver处理异常二、ExceptionHandler注解三、重点&#xff1a;添加ExceptionHandler注解方法的形参只能是异常类型四、重点2&#xff1a;捕获所有方法的异常—ControllerAdvice注解五、总结六、ResponseStatusExceptionResolve自定义异常显示页…

[go学习笔记.第十一章.项目案例] 1.家庭收支记账软件项目

一.基本介绍 1.项目开发流程说明 2.项目需求说明 目标: 模拟实现一个基于文本界面的<<家庭记账软件>> 掌握初步的编程技巧和调试技巧 主要涉及以下知识点 : (1).局部变量和基本数据类型 (2).循环语句 (3).分支语句 (4).简单的屏幕输出格式控制 (5).进阶&#xff1…

刷题日记【第九篇】-笔试必刷题【杨辉三角的变形+计算某字符出现的次数+字符串通配符+统计每个月兔子的总数】

下列sql语句中哪条语句可为用户zhangsan分配数据库userdb表userinfo的查询和插入数据权限&#xff08;A&#xff09;。 常用的管理权限的命令为&#xff1a; grant select/insert/update/delete on 数据库名.表名 to 用户名‘该用户允许访问的ip’ 在oracle中&#xff0c;下面哪…