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

特性SQLNoSQLNewSQL
关系模型没有
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的五种基本数据类型,下章节讲解底层数据结构,以及实现

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

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

相关文章

在 Ubuntu 上离线安装 Prometheus 和 Grafana

在 Ubuntu 上离线安装 Prometheus 和 Grafana 的步骤如下: 一.安装验证 二.安装步骤 1.准备离线安装包 在一台可以访问互联网的机器上下载 Prometheus 和 Grafana 的二进制文件。 Prometheus 下载地址:Prometheus 官方下载页面Grafana 下载地址:Grafana 官方下载页面下载所…

mapbox基础,加载ESRI OpenStreetMap开放街景标准风格矢量图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀加载ESRI OpenStreetMap开放街景标准风…

Java 集合有序性与重复性总结及记忆技巧

Java 集合有序性与重复性总结及记忆技巧 一、集合分类速查表 集合类型是否有序是否允许重复记忆口诀ArrayList✅ 有序(插入顺序)✅ 可重复"数组列表,顺序记牢"LinkedList✅ 有序(插入顺序)✅ 可重复"…

记录学习的第二十三天

老样子,每日一题开胃。 我一开始还想着暴力解一下试试呢,结果不太行😂 接着两道动态规划。 这道题我本来是想用最长递增子序列来做的,不过实在是太麻烦了,实在做不下去了。 然后看了题解,发现可以倒着数。 …

MTK-Android12-13 屏幕永不休眠功能实现

MTK-Android12-13 屏幕永不休眠功能实现 文章目录 需求场景参考资料修改文件简要分析实现方案默认休眠时间设置 def_screen_off_timeout息屏时间添加永不休眠 screen_timeout_entries更新休眠时间 updateUserActivitySummaryLocked 总结 需求 屏幕永不休眠功能 备注&#xff…

Lua 中,`math.random` 的详细用法

在 Lua 中&#xff0c;math.random 是用于生成伪随机数的核心函数。以下是其详细用法、注意事项及常见问题的解决方案&#xff1a; Lua 中&#xff0c;math.random 的详细用法—目录 一、基础用法1. 生成随机浮点数&#xff08;0 ≤ x < 1&#xff09;2. 生成指定范围的随机…

HOW - React Error Catch 机制

目录 1. 错误边界&#xff08;Error Boundaries&#xff09;使用场景写法&#xff08;类组件方式&#xff09;&#xff1a;componentDidCatch 2. 事件处理器中的错误3. 异步函数中的错误&#xff08;如 fetch、Promise&#xff09;4. 全局未捕获错误&#xff08;适用于整个 Rea…

1.ElasticSearch-入门基础操作

一、介绍 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 这就是所说的ELK 能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES&#xff0c;ES是一个开源的高扩展的分布式全文搜索引擎,是…

通过扣子平台将数据写入飞书多维表格

目录 1.1 创建飞书开放平台应用 1.2 创建飞书多维表格 1.3 创建扣子平台插件 1.1 创建飞书开放平台应用 1.1.1 打开地址&#xff1a;飞书开放平台&#xff0c;点击创建应用 注&#xff1a;商店应用需要申请ISV资质&#xff0c;填写企业主体信息&#xff0c;个人的话&#x…

MYSQL数据库语法补充

一&#xff0c;DQL基础查询 DQL&#xff08;Data Query Language&#xff09;数据查询语言&#xff0c;可以单表查询&#xff0c;也可以多表查询 语法&#xff1a; select 查询结果 from 表名 where 条件&#xff1b; 特点&#xff1a; 查询结果可以是&#xff1a;表中的字段…

Redis到底能不能做主数据库?

张三拍案而起&#xff1a;“Redis 是缓存数据库&#xff0c;怎么能当主数据库用&#xff1f;简直是天方夜谭&#xff01;” 李四冷笑回应&#xff1a;“你没用过&#xff0c;凭什么说不行&#xff1f;我已经用 Redis 做主数据库好几年了&#xff0c;系统稳定得像铁板一块&…

flutter 项目结构目录以及pubspec.ymal等文件描述

在Flutter项目中&#xff0c;目录结构和pubspec.yaml文件是非常重要的组成部分&#xff0c;它们定义了项目的结构、依赖管理以及如何构建和运行项目。下面我将详细解释这些关键元素&#xff1a; 1. Flutter项目目录结构 Flutter项目的标准目录结构通常如下所示&#xff1a; …

CentOS 环境下 MySQL 数据库全部备份的操作指南

最近阿里云个人服务到期&#xff0c;因为是很久之前买的测试机器&#xff0c;配置较低&#xff0c;上面运行的有技术博客 和以往的测试项目&#xff0c;所以准备放弃掉。 需要备份下上面的表结构和数据、以及代码仓库。 下面是一个完整的 CentOS 环境下 MySQL 数据库全部备份…

ecplise 工具 没有Java EE Tools 选项

Java EE Tools 是将项目转换为web项目的重要的快捷键&#xff0c;如果进行web开发 那是不可或缺的 该工具是一个插件&#xff0c;可以作为插件安装到ecplise上 安装步骤如下&#xff1a; 找到help-->install new software 在弹出的页面中 work with中输入&#xff1a;Jun…

544 eff.c 1761 优化设计文档

1:性能分析 1.1性能对比 oneapi 与hygonGcc性能对比发现&#xff0c;544课题中的eff.c 1761循环处&#xff0c;oneapi 进行了循环向量化, gcc使用标量&#xff0c;循环源码前加 #pragma clang loop vectorize(disable) 找出oneapi在该循环处关闭和开启loop vect 的性能差距&a…

LeetCode.3396.使数组元素互不相同所需的最少操作次数

3396. 使数组元素互不相同所需的最少操作次数 给你一个整数数组 nums&#xff0c;你需要确保数组中的元素 互不相同 。为此&#xff0c;你可以执行以下操作任意次&#xff1a; 从数组的开头移除 3 个元素。如果数组中元素少于 3 个&#xff0c;则移除所有剩余元素。 注意&…

【已完结STM32】--自学江协科技笔记汇总

以下学习笔记代码均来自b站江协科技视频 笔记汇总完结 文章笔记对应江科大视频新建工程【2-2】新建工程江科大STM32-GPIO输出 点亮LED&#xff0c;LED闪烁&#xff0c;LED流水灯&#xff0c;蜂鸣器&#xff08;学习笔记&#xff09;_unit32-t rcc-apb2periph-CSDN博客 【3-1】…

QML Loader:加载组件与状态监控

目录 引言相关阅读工程结构示例一&#xff1a;从文件加载组件 (LoaderFile.qml)代码实现被加载的组件&#xff1a;MyComponent.qml代码解析运行效果 示例二&#xff1a;直接加载Component对象 (LoaderComponent.qml)代码实现代码解析运行效果 示例三&#xff1a;监控加载状态 (…

K8S核心技术点

Pod&#xff0c;Service和Deployment的关系 Pod&#xff1a;Kubernetes 中最小的部署单元&#xff0c;用于运行容器化应用。 Service&#xff1a;提供服务发现和负载均衡&#xff0c;为 Pod 提供稳定的网络端点&#xff0c;ClusterIP&#xff0c;NodePort&#xff0c;LoadBala…

Spring 核心注解深度解析:@Autowired、@Repository 与它们的协作关系

引言 在 Spring 框架中&#xff0c;​依赖注入&#xff08;DI&#xff09;​​ 是实现松耦合架构的核心机制。Autowired 和 Repository 作为两个高频使用的注解&#xff0c;分别承担着 ​依赖装配​ 和 ​数据访问层标识​ 的关键职责。本文将深入探讨它们的功能特性、协作模式…