Redis的数据结构

一、Redis概述

        Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。

二、字符串类型

        String类型,也就是字符串类型,是Redis中最简单的存储类型 其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串

  • int:整数类型,可以做自增、自减操作

  • float:浮点类型,可以做自增、自减操作 不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同,字符串类型的最大空间不能超过512M。

        String类型的常用命令:

命令描述
SET添加或者修改一个已经存在的String类型的键值对
GET根据key获取String类型的value
MEST批量添加多个String类型的键值对
MGET根据多个key获取多个String类型的value
INCR让一个整形的key自增1
INCRBY让一个整形的key自增并指定步长值,例如:incrby num 2,让num值自增2
INCRBYFLOAT让一个浮点类型的数字自增并指定步长值
SETNX添加一个String类型的键值对,前提是这个key不存在,否则不执行,可以理解为真正的
SETEX添加一个String类型的键值对,并指定有效期

示例:

存储: set key value
127.0.0.1:6379> set username zhangsan
OK
获取: get key
127.0.0.1:6379> get username
"zhangsan"
3. 删除: del key
127.0.0.1:6379> del age
(integer) 1

三、哈希类型

  • Hash类型,也叫散列,其中value是一个无序字典,类似于Java中的HashMap结构

  • String结构是将对象序列化为JSON字符串后存储,当我们要修改对象的某个属性值的时候很不方便

  • Hash的常用命令有

命令描述
HSET key field value添加或者修改hash类型key的field的值
HGET key field获取一个hash类型key的field的值
HMSET批量添加多个hash类型key的field的值
HMGET批量获取多个hash类型key的field的值
HGETALL获取一个hash类型的key中的所有的field和value
HKEYS获取一个hash类型的key中的所有的field
HINCRBY让一个hash类型key的字段值自增并指定步长
HSETNX添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
1. 存储: hset key field value
127.0.0.1:6379> hset myhash username lisi
(integer) 1
127.0.0.1:6379> hset myhash password 123
​(integer) 1
2. 获取: 
* hget key field: 获取指定的field对应的值
127.0.0.1:6379> hget myhash username
"lisi"
* hgetall key:获取所有的field和value
​127.0.0.1:6379> hgetall myhash
1) "username"
2) "lisi"
3) "password"
4) "123"
​					
3. 删除: hdel key field
127.0.0.1:6379> hdel myhash username
(integer) 1

四、列表类型

  • Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

  • 特征也与LinkedList类似:

    • 有序

    • 元素可以重复

    • 插入和删除快

    • 查询速度一般

  • 常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

  • List的常见命令有:

命令描述
LPUSH key element …向列表左侧插入一个或多个元素
LPOP key移除并返回列表左侧的第一个元素,没有则返回nil
RPUSH key element …向列表右侧插入一个或多个元素
RPOP key移除并返回列表右侧的第一个元素
LRANGE key star end返回一段角标范围内的所有元素
BLPOP和BRPOP与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
2. 获取:
lrange key start end :范围获取
127.0.0.1:6379> lrange myList 0 -1
1) "b"
2) "a"
3) "c"

五、集合类型

        Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:无序、元素不可重复、查找快、支持交集、并集、差集等功能。

        Set的常见命令:

命令描述
SADD key member …向set中添加一个或多个元素
SREM key member …移除set中的指定元素
SCARD key返回set中元素的个数
SISMEMBER key member判断一个元素是否存在于set中
SMEMBERS获取set中的所有元素
SINTER key1 key2 …求key1与key2的交集
SUNION key1 key2 …求key1与key2的并集
SDIFF key1 key2 …求key1与key2的差集

        命令示例:
        1. 存储:sadd key value
            127.0.0.1:6379> sadd myset a
            (integer) 1
            127.0.0.1:6379> sadd myset a
            (integer) 0
        2. 获取:smembers key:获取set集合中所有元素
            127.0.0.1:6379> smembers myset
            1) "a"
        3. 删除:srem key value:删除set集合中的某个元素    
            127.0.0.1:6379> srem myset a
            (integer) 1

六、SortedSet类型

        有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排。

        Sortedset的常见命令:

命令描述
ZADD key score member添加一个或多个元素到sorted set ,如果已经存在则更新其score值
ZREM key member删除sorted set中的一个指定元素
ZSCORE key member获取sorted set中的指定元素的score值
ZRANK key member获取sorted set 中的指定元素的排名
ZCARD key获取sorted set中的元素个数
ZCOUNT key min max统计score值在给定范围内的所有元素的个数
ZINCRBY key increment member让sorted set中的指定元素自增,步长为指定的increment值
ZRANGE key min max按照score排序后,获取指定排名范围内的元素
ZRANGEBYSCORE key min max按照score排序后,获取指定score范围内的元素
ZDIFF、ZINTER、ZUNION求差集、交集、并集

        示例:

1. 存储:zadd key score value
            127.0.0.1:6379> zadd mysort 60 zhangsan
            (integer) 1
            127.0.0.1:6379> zadd mysort 50 lisi
            (integer) 1
            127.0.0.1:6379> zadd mysort 80 wangwu
            (integer) 1
2. 获取:zrange key start end [withscores]
            127.0.0.1:6379> zrange mysort 0 -1
            1) "lisi"
            2) "zhangsan"
            3) "wangwu"

            127.0.0.1:6379> zrange mysort 0 -1 withscores
            1) "zhangsan"
            2) "60"
            3) "wangwu"
            4) "80"
            5) "lisi"
            6) "500"
  3. 删除:zrem key value
            127.0.0.1:6379> zrem mysort lisi
            (integer) 1

七、面试题

什么是缓存穿透、缓存雪崩、缓存击穿?  

缓存穿透:大量请求根本不存在的key(下文详解)

缓存雪崩:redis中大量key集体过期(下文详解)

缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热点key过期)

        穿透解决方案:对空值进行缓存;设置白名单;使用布隆过滤器;网警

        雪崩解决方案:

进行预先的热门词汇的设置,进行key时长的调整

实时调整,监控哪些数据是热门数据,实时的调整key的过期时长

使用锁机制

        击穿解决方案:

进行预先的热门词汇的设置,进行key时长的调整

实时调整,监控哪些数据是热门数据,实时的调整key的过期时长

使用锁机制(只有一个线程可以进行热点数据的重构)

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

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

相关文章

十四届蓝桥杯STEMA考试Python真题试卷第二套第一题

来源:十四届蓝桥杯STEMA考试Python真题试卷第二套编程第一题 题目描述: 给定一个字符串,输出字符串中最后一个字符。 输入描述: 输入一个字符串 输出描述: 输出字符串中最后一个字符 样例输入: hgf 样…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(4)

8.1、实现分区 在模块接口分区文件中不需要声明分区,也可以在模块实现分区文件中进行声明,在一个以.cpp为扩展名的正常源代码文件中,在这种情况下,它是一个实现分区,有时候叫内部分区。这样的分区无法导出,…

随着 AI 技术的不断发展,AI大模型正随着 AI 技术的不断发展,AI大模型正

随着 AI 技术的不断发展,AI大模型正在重塑软件开发流程,从代码自动生成到智能测试,未来,AI 大模型将会对软件开发者、企业,以及整个产业链都产生深远的影响。欢迎与我们一起,从 AI 大模型的定义、应用场景、…

数组对象常用方法合集

1、运算扩展符 ES6通过扩展元素符<font style"color:rgb(71, 101, 130);">...</font>&#xff0c;好比 <font style"color:rgb(71, 101, 130);">rest</font> 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 conso…

MATLAB基础应用精讲-【数模应用】平均绝对误差损失 Mean Absolute Error Loss(附python、R语言和MATLAB代码实现)

目录 前言 几个高频面试题目 RMSE与MAE对比 平均绝对误差和均方误差(L1&L2)比较 MAE与MSE的性质对比 2.1 敏感度 2.2 单位与解释 2.3 数学特性 优缺点分析 3.1 MAE的优缺点 3.2 MSE的优缺点 应用场景 4.1 MAE的应用 4.2 MSE的应用 均方根误差和平均绝对误差的…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统&#xff0c;通常使用两种身份验证模式&#xff1a;Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作&#xff0c;对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…

基于Spring Boot的信息学科平台系统开发指南

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于保密信息学科平台系统的相关信息成为必…

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要&#xff1a;本文涵盖了GIS软件操作的多方面内容&#xff0c;包括地图文档的新建、打开、保存及版本兼容性处理&#xff1b;错误与警告的查阅及帮助文档的使用技巧&#xff1b;地图打印比例尺的调整与地图信息的完善&#xff1b;图层操作的撤销与恢复&#xff0c;界面元素的…

从零开始的c++之旅——继承

1. 继承 1.继承概念及定义 继承是面向对象编程的三大特点之一&#xff0c;它使得我们可以在原有类特性的基础之上&#xff0c;增加方法 和属性&#xff0c;这样产生的新的类&#xff0c;称为派生类。 继承 呈现了⾯向对象程序设计的层次结构&#xff0c;以前我们接触的…

【学习】软件测试中V模型、W模型、螺旋模型三者介绍

在软件工程的星辰大海之中&#xff0c;存在着三种独特的航路图&#xff1a;V模型、W模型以及螺旋模型。它们分别以各自的方式描绘了软件开发与测试的不同旅程。 首先映入眼帘的是V模型——一个以垂直线条贯穿始终的简洁图形。这个模型如同一座倒立的“V”字形山峰&#xff0c;…

SpringMVC笔记 一万字

此笔记来自于B站尚硅谷 文章目录 一、SpringMVC 简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求…

Redis 分布式锁:原理、实现及最佳实践

随着现代互联网应用的不断发展&#xff0c;系统架构从单体应用逐步演变为分布式系统。为了保证分布式系统中的资源不被多个节点同时访问&#xff0c;确保数据的一致性和系统的稳定性&#xff0c;分布式锁的应用变得尤为重要。Redis 作为一个高性能的内存数据库&#xff0c;凭借…

【快速上手】pyspark 集群环境下的搭建(Standalone模式)

目录 前言 &#xff1a; 一、spark运行的五种模式 二、 安装步骤 安装前准备 1.第一步&#xff1a;安装python 2.第二步&#xff1a;在bigdata01上安装spark 3.第三步&#xff1a;同步bigdata01中的spark到bigdata02和03上 三、集群启动/关闭 四、打开监控界面验证 前…

Cloud Native Spring in Action

目录 设计原则 15 Factor App 数据验证和错误处理 测试 使用 Junit 5 进行单元测试 使用 SpringBootTest 进行集成测试 使用 WebMvcTest 测试 REST Controller 使用 JsonTest 测试 JSON 序列化 使用 DataJdbcTest 和 Testcontainers 测试数据持久化 使用 Reactor 和 …

三周精通FastAPI:31 使用 StaticFiles从目录中自动提供静态文件

官方文档&#xff1a;静态文件 - FastAPI 静态文件 您可以使用 StaticFiles从目录中自动提供静态文件。 使用StaticFiles 导入StaticFiles。"挂载"(Mount) 一个 StaticFiles() 实例到一个指定路径。 from fastapi import FastAPI from fastapi.staticfiles impo…

【双目视觉标定】——1原理与实践

0 前言 双目视觉定位是目前机器&#xff08;机器人&#xff09;等领域中使用得非常广泛的视觉定位技术&#xff0c;双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算&#xff0c;所以双目相机装配要求…

【最佳牛围栏——二分】

题目 思路 扩大数据&#xff0c;避免精度问题&#xff0c;拉到整数域解决不用枚举前缀和的 l 和 r&#xff0c;改为求可能 l 的最小值&#xff0c;线性做法不用记录长度来求平均值&#xff0c;改为用平均值处理数据&#xff08;这是第二条的前提&#xff09;&#xff0c;直接通…

[java][高级]MyBatisPlus

一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤&#xff1f; 1.1 SpringBoot整合MyBatisPlus入门程序 ①&#xff1a;创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②&#xff1a;选择当前模块需要使用的技术集&…

Shutdown Abort 强制关库,真的有可能起不来?

全文目录&#xff1a; 开篇语前言 &#x1f31f;目录 &#x1f4cb;1. 什么是 Shutdown Abort&#xff1f; &#x1f4a1;工作原理 &#x1f527; 2. Shutdown Abort 的潜在风险 ⚠️3. 真实案例分析 &#x1f4ca;案例背景 &#x1f310;分析与反思 &#x1f50d; 4. 如何降低…