快速了解Redis

Redis是什么?

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

与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。

它与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里面的每个节点都关联了一个权重,用来排序。

常用指令

zadd,zcard,zscore,zrange,zrevrange,zrem 等

zadd myZset 3.0 value1 # 添加元素到 sorted set 中 3.0 为权重
(integer) 1
zadd myZset 2.0 value2 1.0 value3 # 一次添加多个元素
(integer) 2
zcard myZset # 查看 sorted set 中的元素数量
(integer) 3
zscore myZset value1 # 查看某个 value 的权重
"3"
zrange  myZset 0 -1 # 顺序输出某个范围区间的元素,0 -1 表示输出所有元素
1) "value3"
2) "value2"
3) "value1"
zrange  myZset 0 1 # 顺序输出某个范围区间的元素,0 为 start  1 为 stop
1) "value3"
2) "value2"
zrevrange  myZset 0 1 # 逆序输出某个范围区间的元素,0 为 start  1 为 stop
1) "value1"
2) "value2"
使用场景

直播系统的实时排行榜

6.Geospatial

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

使用场景

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

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

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

相关文章

布隆过滤器(做筛选器索引)

什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是…

GIS学习笔记(四):GIS数据可视化综合(矢量数据)

矢量数据 arcgis的主要可视化工具:属性 符号系统 符号系统 按类别 这里不会涉及到数字的大小因素,只是按照字符的分类去做可视化 “唯一值”的含义 “建筑年代”字段共有10个年份,一个年份也许有多个数据( eg.1990年的建筑有20个)&…

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码

理解字符编码,请参考:unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 汉字(或者说多字节字符)的存放需求,是计算机中各种编码问题的最直接原因。如果程序不直接使用汉字,或间接在所有操作步骤中统一使…

rocketmq源码分析(一)broker启动remoting抽象

1. netty基础 2. broker启动 rocketmq-broker.puml startuml BrokerStartup -> BrokerStartup: createBrokerController BrokerStartup -> BrokerController : controller.initialize() 初始化BrokerController,new 出各种 NettyRemotingServer BrokerController ->…

使用Tokeniser估算GPT和LLM服务的查询成本

将LLM集成到项目所花费的成本主要是我们通过API获取LLM返回结果的成本,而这些成本通常是根据处理的令牌数量计算的。我们如何预估我们的令牌数量呢?Tokeniser包可以有效地计算文本输入中的令牌来估算这些成本。本文将介绍如何使用Tokeniser有效地预测和管…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用, 一般是作为k-means前不知道要指定k为何值的时候&#…

vue 下载的插件从哪里上传?npm发布插件详细记录

文章参考: 参考文章一: 封装vue插件并发布到npm详细步骤_vue-cli 封装插件-CSDN博客 参考文章二: npm发布vue插件步骤、组件、package、adduser、publish、getElementsByClassName、important、export、default、target、dest_export default…

linux ,Windows部署

Linux部署 准备好虚拟机 连接好查看版本:java -version安装jdk 解压命令:tar -zxvf 加jdk的压缩文件名cd /etc 在编辑vim profile文件 在最底下写入: export JAVA_HOME/root/soft/jdk1.8.0_151(跟自己的jdk保持一致&#xff0…

初窥机器学习

人工智能 近几年来,人工智能(AI)已成为家喻户晓的术语,我们在游戏、电影(还记得J.A.R.V.I.S吗?)和书籍中经常看到它的提及和描绘,但人工智能究竟是什么呢? 人工智能简单…

go语言添加代理

LiteIDE 工具->管理 https://mirrors.aliyun.com/goproxy/或https://goproxy.cn,direct 命令行 go env -w GOPROXYhttps://goproxy.cn,direct

前端页面访问后台hiveserver2,阶段性报错

1、运行环境 Windows11下安装VMware,VMware下安装CentOS7 Linux系统,三台虚拟机集群部署hadoop,安装hive; 在Linux下安装Eclipse,创建maven工程,使用hive-jdbc-2.3.2访问hiveserver2 2、在windows11下&…

​如何防止网络攻击?

应对不同类型网络攻击的最佳途径是“知己”、“知彼”,在了解它们的工作原理、能够识别其手段、方法及意图的前提下,找出针对性的应对文案。今天,就为大家总结以下防止不同类型网络攻击的有效方法,希望无论是对个人、还是企业和组…

字节跳动也启动春季校园招聘了(含二面算法原题)

字节跳动 - 春招启动 随着各个大厂陆续打响春招的响头炮,字节跳动也官宣了春季校园招聘的正式开始。 还是那句话:连互联网大厂启动校招计划尚且争先恐后,你还有什么理由不马上行动?! 先来扫一眼「春招流程」和「面向群…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

​LeetCode解法汇总1261. 在受污染的二叉树中查找元素

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给出一个满足下述规则的二叉树&#xff1…

小程序学习 1

pages/goods/search/home.wxml首页功能设定 1. loading入场 2. 下拉刷新 3. 搜索栏 4. 分类切换 5. 商品列表 6. 规格弹层 7. 加载更多 <view style"text-align: center; color: #b9b9b9" wx:if"{{pageLoading}}"><t-loading theme"circula…

每日一题——LeetCode2129.将标题首字母大写

方法一 个人方法 将字符串转为数组&#xff0c;遍历数组&#xff0c;对数组的每一个元素&#xff0c;先全部转为小写&#xff0c;如果当前元素长度大于2&#xff0c;将第一个字符转为大写形式 var capitalizeTitle function(title) {titletitle.split( )for(let i0;i<tit…

同学,请实现一个扫码登录

大概的流程图如下 主要涉及到的是pc端、手机端和后台服务端。由于听产品同事说手机端由原生端&#xff08;安卓和IOS&#xff09;来实现&#xff0c;因此我这边只需要开发pc端就行&#xff0c;工作量直接减半有没有。做过该功能的小伙伴肯定了解&#xff0c;pc端的实现还是比较…

python淘宝网页爬虫数据保存到 csv和mysql(selenium)

数据库连接设置&#xff08;表和字段要提前在数据库中建好&#xff09; # 数据库中要插入的表 MYSQL_TABLE goods# MySQL 数据库连接配置,根据自己的本地数据库修改 db_config {host: localhost,port: 3306,user: root,password: ma*****6,database: may2024,charset: utf8mb…

一体机电脑辐射超标整改

电脑一体机是目前台式机和笔记本电脑之间的一个新型的市场产物&#xff0c;它将主机部分、显示器部分整合到一起的新形态电脑&#xff0c;该产品的创新在于内部元件的高度集成。随着无线技术的发展&#xff0c;电脑一体机的键盘、鼠标与显示器可实现无线链接&#xff0c;机器只…