快速了解Redis

news2025/1/21 18:51:39

Redis是什么?

Redis是一个数据库,是一个跨平台的非关系型数据库,Redis完全开源,遵守BSD协议。它通过键值对(Key-Value)的形式存储数据。

它与mysql数据库有什么区别?

redis通过键值对(Key-Value)的形式存储数据,mysql使用B+树索引结构来组织数据,通过表格的概念来组织和存储数据。

redis通常将数据存储在内存中,mysql通常将数据存储在磁盘上,因此redis要远大于mysql的读写速度。

redis默认情况下是单线程的,mysql是多线程的。

redis通过RDB(快照)和AOF(追加日志)两种机制实现数据持久化。(RDB通过定期将数据快照保存到磁盘上,AOF则将每个写操作追加到日志文件中)。mysql使用事务日志来记录和复制数据更改,同时支持事务回滚和故障恢复。

什么时候会用到Redis?

1.用redis做缓存,当数据量非常庞大、查询频繁时,如购物秒杀,mysql数据库的压力就会非常大。用redis做缓存就是为了减少数据库的压力。redis在内存中,有非常高的性能。

2.不需要做持久化的数据。如验证码,验证码只需要在几分钟内有效,假设存入到mysql,既占用了地方又浪费了时间。

3.实时统计。由于Redis的高速读写能力,它经常被用于实时统计和计数应用,如在线用户数统计、点赞/收藏数等。通过Redis提供的原子计数操作,可以方便地进行实时的增加和查询。

4.分布式锁。redis的原子操作和分布式特性可以实现分布式锁。

Redis的数据结构

1.String

字符串类型,可以包含任何数据,最大可以是512MB,字符串在创建后,如果存储容量不够,就会进行扩容,当字符串的容量小于1mb时,就会执行加倍扩容,当容量大于1MB时,则每次多增加1MB。

常用指令
set name zhencong   --存放字符串键值对
mset name zhencong age 18 --批量存放键值对
SETNX name zhencong  --如果不存在key为name,那么就设置value(分布式锁的原理)
get name   -- 获取key
mget name age  --批量获取key
DEL key -- 删除key
expire key 60 --设置过期时间,单位为秒
INCR key -- 将key中存储的数字加1
DECR key -- 将key中存储的数字减1
INCRBY key 2  --将key中存储的值都加上2
DECRBY key 2 --将key中存储的值都减去2

使用场景

1,不需要持久化的数据或者频繁更新的数据,比如验证码,点赞数

2,对象缓存:可以通过序列化工具类,来缓存java对象,比如将某个对象序列化为json,需要用的时候再取出来,反序列化。

3,实现分布式锁,(使用分布式锁时一定要设置过期时间,防止不能释放锁,造成死锁)

4,可以用incr,decr来实现点赞数

2.hash

常用指令
hset hash name zhencong --设置值,
hget hash name  -- 获取值
hmset hash name zhencong age 18 --批量设置
hmget hash name age --批量获取
hgetall hash 获取key的所有值
hkeys hash 获取hashmap中所有的key
hvals hash 获取hashmap中所有的value

使用场景

可以用于存储系统中对象的数据。(从图中可以看出很像java中的类对象,对象jilit 的sex属性是男 age属性是21)

3.List

redis的list是按插入顺序排序的,可以头插或者尾插,是一个双向链表,对两端的操作性能会比较高,对中间节点的操作性能相对来说较差(因为得通过指针对遍历对应的节点)。可以通过这里的List来实现数据结构的队列和栈。

常用指令
rpush myList value1 --向 list 的头部(右边)添加元素
rpush myList value2 value3 --向list的头部(最右边)添加多个元素
lpop myList # 将 list的尾部(最左边)元素取出
rpop myList2 value1 --尾插

队列

使用场景

可以实现栈和队列

4.Set

redis的set,可以自动去重。

常用指令
SADD key member [member ...] --向集合key中添加一个或多个member元素
SMEMBERS key --返回集合key中的所有元素
SISMEMBER key member --判断member元素是否是集合key的成员,返回1表示是成员,返回0表示不是成员
SCARD key --返回集合key的基数(元素个数)
SREM key member [member ...] --从集合key中移除一个或多个member元素
SDIFF key [key ...] --返回所有给定集合的差集,即在第一个集合中但不在其他集合中的元素。
SINTER key [key ...] --返回所有给定集合的交集,即同时存在于所有集合中的元素。
SUNION key [key ...] --返回所有给定集合的并集,即包含所有集合中的元素。
使用场景

1.对数据去重。

2.在线状态,Set可以用于存储在线用户的信息。

3.可以用来计算多个数据源的交集、并集、差集(共同好友、社交网络等)。

5.SortedSet

与Set很像,但SortedSet里面的每个节点都关联了一个权重,用来排序。

使用场景

直播系统的实时排行榜

6.Geospatial

redis提供了经纬度的相关操作。可以表示一个区域的二维坐标。

使用场景

可以用来计算距离最近的门店

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

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

相关文章

深入理解 Vuex:从基础到应用场景

前言 在之前的文章中,我们已经对 Vue.js 有了一定的了解。今天我们要对Vue官方的状态共享管理器Vuex进行详细讲解,将其基本吃透,目标是面对大多数业务需求; 一、介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用…

Rust入门:GCC或VS2019中的c或c++程序如何调用Rust静态库

首先创建一个rust的库,这里我假设命名为c-to-rust1 cargo new --lib c-to-rust1 其中,src/lib.rs的内容如下, #[no_mangle] pub extern "C" fn get_string() -> *const u8 {b"Hello C World\0".as_ptr() }注解 …

高分辨率全球海洋温度和盐度再分析数据Global Ocean Physics Reanalysis(0.083°),并利用matlab读取绘图

1.引言 在研究全球海平面变化的问题中,卫星测高获得总的海平面变化,而海平面变化包含质量变化和比容变化。因此测高数据和海洋物理分析数据对于海平面研究至关重要。 测高数据下载网址: Global Ocean Gridded L 4 Sea Surface Heights And …

【深度学习笔记】计算机视觉——FCN(全卷积网络

全卷积网络 sec_fcn 如 :numref:sec_semantic_segmentation中所介绍的那样,语义分割是对图像中的每个像素分类。 全卷积网络(fully convolutional network,FCN)采用卷积神经网络实现了从图像像素到像素类别的变换 :cite:Long.Sh…

Docker数据卷的挂载

目录 1 概念 2 常用命令 3 操作步骤(主要讲在创建容器时的挂载) 3.1 挂载在默认目录 3.2 挂载在自定义目录 4 附加内容(查看容器的挂载情况) 1 概念 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。这样容器内…

如何恢复已删除的华为手机图片?5 种方式分享

不幸的现实是,华为的珍贵时刻有时会因为意外删除、软件故障或其他不可预见的情况而在眨眼之间消失。在这种情况下,寻求恢复已删除的图片成为个人迫切关心的问题。 本文旨在为用户提供如何从华为恢复已删除图片的实用解决方案。我们将探索五种可行的方法…

#微信小程序创建(获取onenet平台数据)

1.IDE:微信开发者工具 2.实验:创建一个小程序(http get获取onenet平台数据) 3.记录: 百度网盘链接:https://pan.baidu.com/s/1eOd-2EnilnhPWoGUMj0fzw 提取码: 2023 (1)新建一个工…

CentOS/Fedora/Ubuntu/Debian 系统 wget 命令

wget 是云服务器安装环境和面板常用下载命令。下载软件或从远程服务器下载备份到本地服务器,也可以使用 wget 把文件下载到云服务器上。 VPS wget 命令最常用使用方法如下: 安装 wget 一般来说 wget 命令是系统自带的,方面安装环境和面板&…

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。Director Server 和Real Server 在同一个网络中,数据通过二层数据…

guava的使用

对数组操作前判断是否会越界&#xff1a; List<String> s new ArrayList<>();System.out.println(Preconditions.checkElementIndex(2,s.size(),"下标长度超过了")); 是否为空 String s null;System.out.println(Preconditions.checkNotNull(s)); 判空…

六自由度Stewart平台的matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1运动学原理 4.2 Stewart平台运动学方程 5.完整工程文件 1.课题概述 六自由度Stewart平台的matlab模拟与仿真&#xff0c;模拟六自由度Stewart平台的动态变化情况以及伺服角度。 2.系统仿真结果 3.核…

设置word目录从正文开始记录页码,并解决word目录正常,但正文页脚处只显示第一页的页码

设置word目录从正文开始记录页码&#xff0c;并解决word目录正常&#xff0c;但正文页脚处只显示第一页的页码 问题详情1&#xff1a;如何设置目录从正文开始记录页码 问题详情2&#xff1a;word目录处的页码正常&#xff0c;但正文只有第一页的页脚处显示页码 解决方法 在设置…

SpringCloud微服务-RabbitMQ快速入门

文章目录 RabbitMQ快速入门1、什么是MQ&#xff1f;2、RabbitMQ概述3、RabbitMQ的结构和概念4、常见消息模型5、HelloWorld RabbitMQ快速入门 1、什么是MQ&#xff1f; MQ &#xff08;MessageQueue&#xff09;&#xff0c;中文是消息队列&#xff0c;字面来看就是存放消息的…

【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表

文章目录 题目思路解答 题目 简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入…

蓝桥杯-排序

数组排序 Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序&#xff0c;并且时按从小到大的顺序。 package Work;import java.util.*;public class Imcomplete {public static void main(String args[]) {int arr[]new int [] {1,324,4,5,7,2};Arrays.sort(arr)…

【Java】CAP理论以及它的实际应用案例

目录 简介 不是所谓的“3 选 2” CAP 实际应用案例 总结 CAP 理论/定理起源于 2000年&#xff0c;由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会&#xff08;PODC&#xff09;上提出&#xff0c;因此 CAP定理又被称作 布鲁尔定理&#xff08;Brewer’s the…

JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)

目录 项目主要目标 技术选型 面向对象编程 使用集合容器 程序流程控制 使用常见API 系统架构搭建与欢迎页设计 Account ATM Test 用户开户功能实现 录入账户名称与性别 录入账户密码与取现额度 生成新卡号 存入账户 登录功能实现 登录后操作实现 退出账户 存…

JavaScript 入门手册(二)

目录 八、JavaScript 数据类型 8.1 动态类型 8.2 typeof 操作符 8.3 Undefined 和 Null 九、JavaScript 对象 9.1 创建对象 9.2 对象方法 十、作用域 十一、条件语句 十二、循环 12.1 for 循环 12.1.1 语句 1 12.1.2 语句 2 12.1.3 语句 3 12.2 for...in 循环 …

文本溢出隐藏 显示省略号,鼠标悬浮展示 el-tooltip(TooltipIsShowMixin封装)

目录 mixins 封装使用 TooltipIsShowMixin效果展示 mixins 封装 TooltipIsShowMixin.js export const TooltipIsShowMixin {data() {return {tooltipIsShow: false}},methods: {tooltipIsDisHandler(className) {this.$nextTick(() > {const dom document.querySelector…

语义化与自动化——第三代指标平台两大核心能力详解(内含QA)

【作者简介】杜雪芳&#xff0c;Aloudata 合伙人兼首席业务架构师。12 年数据业务从业经验&#xff0c;3 年管理咨询经验。历任阿里集团淘宝商业分析负责人、阿里音乐商业智能中心负责人、蚂蚁集团用户增长分析与洞察产品负责人。在数据体系搭建、数据分析、用户标签建设、用户…