01-Redis-基础
1 redis诞生历程
redis的作者笔名叫做antirez,2008年的时候他做了一个记录网站访问情况的系统,比如每天有多少个用户,多少个页面被浏览,访客的IP、操作系统、浏览器、使用的搜索关键词等等(跟百度统计、CNZZ功能一样)。最开始存储方案用MySQL,但是实在慢的不行,09年的时候antirez就自己写了一个内存的list,这就是redis。
最开始redis支持List。现在数据类型丰富了、功能也丰富了,在全世界都非常的流行。
redis(REmote DIctionary Service),远程字典服务。
2 SQL与NOSQL
在绝大部分的时候,我们都会先考虑使用关系型数据库来存储业务数据,比如MySQL、Oracle等等。
关系型数据库特点:
1、它以表格的形式,基于行存储数据,是一个二维模式
2、它存储的是结构化的数据,数据存储有固定的模式(schema),数据需要适用表结构
3、表与表之间存在关联(Relationship)
4、大部分关系型数据库都支持SQL(结构化查询语言)的操作,支持复杂的关联查询
5、通过支持事务(ACID)来提供严格或者实时的数据一致性
关系型数据库也存在一些限制:
1、要实现扩容的话,只能向上(垂直)扩展,比如磁盘限制了数据的存储,就要扩大磁盘容量
通过堆硬件的方式,不支持动态的扩缩容。水平扩容需要复杂的技术来实现,比如分库分
表。
2、表结构修改困难,因此存储的数据格式也受到限制
3、关系型数据库通常会把数据持久化到磁盘,在高并发和高数据量的情况下,基于磁盘的读
写压力比较大。
为了解决关系型数据库的限制,所以有了非关系型数据库的存在,我们一般叫做non-relational或者Not Only SQL。NoSQL最开始是不提供SQL(Structured Query Language)的数据库的意思。
非关系型数据库的特点:
1、存储非结构化的数据,比如文本、图片、音频、视频
2、表与表之间没有关联,可扩展性强
3、保证数据的最终一致性,遵循BASE(碱)理论。Basically Available(基本可用); Soft-state
(软状态) Eventually Consistent(最终一致性)
4、支持海量数据的存储和高并发的高效读写
5、支持分布式,能够对数据进行分片存储、扩缩容简单
对于不同的存储类型,我们又有各种各样的非关系型数据库,比如有几种常见的类型:
1、KV存储:redis和Memcached
2、文档存储: MongoDB
3、列存储:HBase
4、图存储:Neo4j
5、对象存储
6、XML存储等等
SQL与NoSQL的特性合在一起NewSQL数据库,NewSQL结合了SQL与NoSQL的特性,例如TiDB、VoltDB、ScaleDB
| 特性 | SQL | NoSQL | NewSQL |
| 关系模型 | 有 | 没有 | 有 |
| SQL语法 | 有 | 没有 | 有 |
| ACID | 有 | 没有 | 有 |
| 水平扩展 | 没有 | 有 | 有 |
| 海量数据 | 没有 | 有 | 有 |
| 无结构化 | 没有 | 有 | 没有 |
3 redis 特性
对于redis,我们大部分的时候认识一个缓存的组件,当然从它的发展历史我们也可以看到,它最开始并不是作为缓存使用的,只是在很多的互联网应用里面,它作为缓存发挥了最大的作用1、把数据放到内存中:一是内存的速度更快,10W QPS; 二是减少计算的时间,减轻数据库压力。
2、如果用内存的数据结构作为缓存,为什么不用HashMap或者Memcached;
1)、更丰富的数据类型
2)、支持多种编程语言
3)、功能丰富:持久化机制、内存淘汰策略、事务、发布订阅、pipeline、lua
4)、支持集群、分布式
4 基本数据类型
4.1 String字符串
最基本也是最常用的数据类型就是String,set和get命令就是String的操作命令,redis的字符串被叫做二进制安全的字符串。
#获取指定范围的字符
getrange bonnie 0 1
# 获取值长度
strlen bonnie
#字符串追加内容
append bonnie good
# 设置多个值(批量操作,原子性)
mset bonnie 2673 huihui 666
#获取多个值
mget bonnie huihui
# 设置值,如果 key 存在,则不成功
setnx bonnie pyy
# 基于此可实现分布式锁。用 del key 释放锁。
#但如果释放锁的操作失败了,导致其他节点永远获取不到锁,怎么办?
# 加过期时间。单独用 expire 加过期,也失败了,无法保证原子性,怎么办?多参数set key value [expiration EX seconds|PX millisecondsl[NX|XX]
#使用参数的方式
set k1 v1 EX 10 NX
#整数值递增(值不存在会得到1)
incr bonnie
incrby bonnie 100
#整数值递减
decr bonnie
decrby bonnie 100
# 浮点数增量
set mf 2.6
incrbyfloat mf 7.3
4.2 Hash
Hash用来存储多个无序键值对,最大存储数量2的32次方-1(40亿左右)
# key: h1 field: f value: 6
hset hl f 6
# key: h1 field: e value: 5
hset hl e 5
# 批量设置多个field
hmset hl a l b 2 c3 d 4
hget hl a
hmget hl a b c d
hkeys hl
hvals hl
hgetall hl
hdel h1 a
hlen h1
4.3 List列表
存储有序的字符串(从左到右),元素可以重复,最大的存储数量2的32次方-1(40亿左右)

lpush queue a
lpush queue b c
rpush queue d e
lpop queue
rpop queue
lindex queue 0
lrange queue 0 -1

4.4 set集合
set存储String类型的无序集合,最大存储数量2的32次方-1(40亿左右)

// 添加一个或者多个元素
sadd myset a b c d e f g
// 获取所有元素
smembers myset
// 统计元素个数
scard myset
// 随机获取一个元素
srandmember myset
// 随机弹出一个元素
/spop myset/
/移除一个或者多个元素
srem myset d e f
// 查看元素是否存在
sismember myset a
4.5 Zset有序集合
sorted set存储有序的元素,每个元素有score,按照score从小到大排名,score相同时,按照key的ASCLL码排序

// 添加元素
zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python
// 获取全部元素
zrange myzset 0 -l withscoreszrevrange myzset 0 -l withscores
// 根据分值区间获取元素
zrangebyscore myzset 20 30
//移除元素 也可以根据 score rank 删除
zrem myzset php cpp
//统计元素个数
zcard myzset
//分值递增
zincrby myzset 5 python
//根据分值统计个数
zcount myzset 20 60
// 获取元素 rank
zrank myzset python
// 获取元素 score
zscore myzset python
//也有倒序的 rev操作(reverse)
本章节简单讲了下redis的五种基本数据类型,下章节讲解底层数据结构,以及实现
相关文章:
01-Redis-基础
1 redis诞生历程 redis的作者笔名叫做antirez,2008年的时候他做了一个记录网站访问情况的系统,比如每天有多少个用户,多少个页面被浏览,访客的IP、操作系统、浏览器、使用的搜索关键词等等(跟百度统计、CNZZ功能一样)。最开始存储…...
【从零开始学习JVM | 第一篇】快速认识JVM
什么是JVM? JVM--Java虚拟机,它是Java实现平台无关性的基石。 Java程序运行的时候,编译器将Java代码编译为平台无关的Java字节码文件(.class),接下来对应平台的JVM对字节码进行运行解释,翻译成…...
使用RabbitMQ实现异步秒杀
搭建RabbitMQ 在虚拟机上用docker搭建RabbitMQ,首先拉取镜像 docker run --privilegedtrue -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management mkdir -p /usr/local/docker/rabbitmq再创建rabbitmq容器,下面的命令已经能够创建之后…...
Spring Boot 配置文件加载优先级全解析
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 配置文件加载优先级全解析 Spring Boot 的配置文件加载机制是开发者管理不同环境配置的核心功能之一。其通过外部化配置(Externaliz…...
解决华硕主板Z890m下载ubuntu20.04后没有以太网问题
问题描述: 华硕主板Z890m下载双系统ubuntu20.04后,发现ubuntu不能打开以太网。 问题原因: 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169,所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...
xLua的Lua调用C#的2,3,4
使用Lua在Unity中创建游戏对象,组件: 相关代码如下: Lua --Lua实例化类 --C# Npc objnew Npc() --通过调用构造函数创建对象 local objCS.Npc() obj.HP100 print(obj.HP) local obj1CS.Npc("admin") print(obj1.Name)--表方法希…...
Debian系统_主板作为路由器_测试局域网设备间网速
Debian系统_主板作为路由器_测试局域网设备间网速 一、360软件测网速 360测出来的网速实际上是宽带的速度,并不是路由器LAN口到电脑这一段的网速 二、使用iperf3 进行双向带宽测试 1、开发板端下载软件 //Debian系统或者/Ubuntu sudo apt update && sudo…...
从 macos 切换到 windows 上安装的工具类软件
起因 用了很多年的macos, 已经习惯了macos上的操作, 期望能在windows上获得类似的体验, 于是花了一些时间来找windows上相对应的软件. 截图软件 snipaste windows和macos都有的软件, 截图非常好用 文件同步软件 oneDrive: 尝试了不同的同步软件, 还是微软在各…...
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
目录 JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码) 一、什么时候该使用Array.map()࿰…...
去除Mysql表中的空格、回车、换行符和特殊字符
系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...
P9242 [蓝桥杯 2023 省 B] 接龙数列
这道题说要求最少删多少个使剩下的序列是接龙序列,这个问题可以转换为序列中最长的接龙序列是多少,然后用总长度减去最长接龙序列的长度就可以了,在第一个暴力版本的代码中我用了两个for循环求出了所有的接龙序列的长度,但是会超时…...
macos下 ragflow二次开发环境搭建
参考官网链接 https://ragflow.io/docs/dev/launch_ragflow_from_source虚拟环境 git clone https://github.com/infiniflow/ragflow.git cd ragflow/ # if not pipx, please install it at first pip3 install pipxpipx install uv uv sync --python 3.10 --all-extras 安装 …...
SQL优化技术分享:从 321 秒到 0.2 秒的性能飞跃 —— 基于 PawSQL 的 TPCH 查询优化实战
在数据库性能优化领域,TPC-H 测试集是一个经典的基准测试工具,常用于评估数据库系统的查询性能。本文将基于 TPCH 测试集中的第 20个查询,结合 PawSQL 自动化优化工具,详细分析如何通过 SQL 重写和索引设计,将查询性能…...
密码学基础——DES算法
前面的密码学基础——密码学文章中介绍了密码学相关的概念,其中简要地对称密码体制(也叫单钥密码体制、秘密密钥体制)进行了解释,我们可以知道单钥体制的加密密钥和解密密钥相同,单钥密码分为流密码和分组密码。 流密码࿰…...
在 Linux 终端中轻松设置 Chromium 的 User-Agent:模拟手机模式与自定义浏览体验
在 Linux 系统中,通过终端灵活控制 Chromium 的行为可以大幅提升工作效率。本文将详细介绍如何通过命令行参数和环境变量自定义 Chromium 的 User-Agent,并结合手机模式模拟,实现更灵活的浏览体验。 为什么需要自定义 User-Agent?…...
ChatGPT 4:引领 AI 创作新时代
文章目录 前言一、ChatGPT 4 的技术革新二、AI 文案创作:精准生成与个性化定制三、AI 绘画艺术:从文字到图像的神奇转化四、AI 视频制作:自动化剪辑与创意实现五、知识库与 ChatGPT 4 的深度融合六、全新的变革和机遇七、相关书籍推荐《ChatG…...
http页面的加载过程
HTTP/2 核心概念 1.1 流(Stream) • 定义:HTTP/2 连接中的逻辑通道,用于传输数据,每个流有唯一标识符(Stream ID)。 • 特点: ◦ 支持多路复用(多个流并行传输&#…...
MySQL【8.0.41版】安装详细教程--无需手动配置环境
一、MySQL 介绍 1. 概述 MySQL 是一个开源的关系型数据库管理系统,由瑞典公司 MySQL AB 开发,现属于 Oracle 旗下。它基于 SQL(结构化查询语言)进行数据管理,支持多用户、多线程操作,广泛应用于 Web 应用、…...
鸿蒙ArkTS实战:从零打造智能表达式计算器(附状态管理+路由传参核心实现)
还在为组件状态混乱、页面跳转丢参数而头疼? 这篇博客将揭秘如何用鸿蒙ArkTS打造一个漂亮美观的智能计算器: ✅ 输入完整表达式,秒出结果——字符串切割简单计算 ✅ 状态管理黑科技——Provide/Consume 实现跨组件实时响应 ✅ 路由传参实战—…...
【58】编程技巧:单片机编程命名规范
【58】编程技巧:单片机编程命名规范 引言 在大型嵌入式项目开发中,变量和常量的命名混乱会导致代码难以维护。本文系统阐述变量、常量、指针、结构体等命名规范,通过统一规则提升代码可读性与协作效率。目标是帮助开发者建立清晰的命名习惯&…...
Windows 部署项目 apache + mod_wsgi,nginx + waitress
文章目录 1、apache mod_wsgi,nginx waitress两种部署方式的区别2、以nginx waitress为例 有些项目必须部署在windows上,有IIS wfastcgi、apache mod_wsgi,nginx waitress部署方式 1、apache mod_wsgi,nginx waitress两种…...
车辆视频检测器linux版对于密码中包含敏感字符的处理方法
由于密码中含有敏感字符,导致前端页面异常,图标变灰,坐标拾取打不开图像等,主要原因是:密码比较前后不一致,左边是Abc_110,右边是:Abc_110%2B,对于此问题,特别…...
Java服务端开发基石:深入理解Spring IoC与依赖注入 (DI)
今天,我们从现代Java开发,尤其是企业级应用中,几乎无处不在的Spring框架的核心概念开始:控制反转(Inversion of Control, IoC) 与 依赖注入(Dependency Injection, DI)。理解它们&am…...
【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例
今天田辛老师和小伙伴探讨了一个有趣的多义词问题, 在人工智能技术日新月异的今天,大语言模型(LLM)对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的? 比如:当用户提到"…...
贪心算法(17)(java)可被三整除的最大整数和
给你一个整数数组 nums,请你找出并返回能被三整除的元素 最大和。 示例 1: 输入:nums [3,6,5,1,8] 输出:18 解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。 …...
qq邮箱群发程序
1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击,进入UI编辑界面: 点击第三步后进入QT的UI设计界面,通过点击按钮进行界面设计,设计后进行保存到当前Pycharm…...
K8S学习之基础七十九:关闭istio功能
关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间,pod都会开启istio功能 反之,如果要开启istio,在对应命名空间打上该标签即可...
上门预约洗鞋店小程序都具备哪些功能?
现在大家对洗鞋子的清洗条件越来越高,在家里不想去,那就要拿去洗鞋店去洗。如果有的客户没时间去洗鞋店,这个时候,有个洗鞋店小程序就可以进行上门取件,帮助没时间的客户去取需要清洗的鞋子,这样岂不是既帮…...
在Ubuntu 22.04上配置【C/C++编译环境】
在Ubuntu 22.04上配置C/C编译环境 如果你想在Ubuntu 22.04上编译和运行C或C程序,首先需要安装一个合适的编译器和相关工具。本文将为你提供详细的安装建议和操作步骤,帮助你快速搭建开发环境。 准备工作 在开始之前,确保你的系统可以通过终…...
蓝桥杯——走迷宫(Java-BFS)
这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制:广度优先搜索按层遍历所有可能的路径,首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用:通过队列按先进先出的顺序处理节点,确保每一步探索的都是当…...
