Redis

简介: Redis

前言:为什么要学Redis?

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存等。

官网:https://redis.io

中文网 Redis中文网

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到10万+的QPS(Queries-per-second每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

Redis是一个基于内存的key-value结构数据库。它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务-remote dictionary server」

redis具有以下优点:

1.基于内存存储,读写性能高。

2.适合存储经常访问的数据。

3.企业开发中常用作缓存

Redis的数据类型

Redis是一种高级的key-value的存储系统,其中key(键)是String类型,value支持5种数据类型即:String,hash,list,set,zset。

关于key(键)的数据类型有以下规则:

1.键不能重复

2.键的作用是用来标识存储的数据

3.数据类型:String

4.命名规则:

1)不能太长:因为查询的效率低,查询起来不方便

2)不能太短:容易重复,同时可读性也差

一:value的第一种数据类型:String

更多命令可以参考Redis中文网:Redis中文网

字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。String为value时,最大存储容量为512M

String的常用命令如下:

命令 功能
set 键 值 添加或修改一个键和值,键不存在就是添加,存在就是修改
get 键 获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL)
del 键 删除指定的键和值,返回删除的个数
SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒。此处的value是指key对应的value值。等价于:SET key value ex seconds
EXPIRE key seconds 如果一个key已经存在,要设置一个过期时间
SETNX key value/set key value nx 保存键值对,如果key存在则不保存,不存在则保存

补充:

批量操作:

mset  name lisi   addr sh

mget name  age addr

del  name age


String作为value的常见的使用场景:

  • 用户登录后端保存短信验证码,并设置失效时间;
  • 代替后端session功能,实现分布式缓存(是将数据分散存储在多台独立的设备上)等;

二:value的第二种数据类型:hash

可以将hash理解为在JavaSE学习的map一样,hash作为value时,最大存储容量为:4G个键值对

hash的常用指令如下:

命令 功能
hset 键 字段 值 添加键,字段,值
hget 键 字段 通过键,字段得到值
hmset 键 字段 值 字段 值 multiply多个,一次添加多个字段和值
hmget 键 字段 字段 通过键,获取多个字段和值
hdel 键 字段 字段 删除一个或多个字段的值
hgetall 键 得到这个键下所有的字段和值
HKEYS 键 获取哈希表中所有字段
HVALS 键 获取哈希表中所有值

例如:创建hash类型的键为person,并且添加一个字段为name,值为zhangsan

命令:hset persion name zhangsan

hash的常用场景:

存储有对象数据的,例如购物车,一个用户对应一个ID号,一个产品可以定义为一个字段值,该产品又可以选择多个数量(1,2,3.....)

三:value的第三种数据类型:list

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个

list常用命令:

命令 行为
lpush 键 元素 元素... left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数
rpush 键 元素 元素... right 从右边向指定的键中添加1个或多个元素
lpop 键 从左边删除一个元素,返回被删除的元素
rpop 键 从右边删除一个元素,返回被删除的元素
lrange 键 开始 结束 得到键中指定范围的元素的数据 每个元素都有一个索引号,从左向右0~n 从右向左索引号:-1~-(n+1),每个元素有2个索引号 如果要取出整个列表中所有的元素,索引号应该是:0~-1
lindex 键 索引值 查询指定索引的元素
llen 键 获取列表的长度
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位默认是秒
LREM key 删除元素个数 value值 从表头删除指定个数的元素

list的图示:

list的常用场景:

1.常用于点赞系列

2.list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名等

四:value的第四种数据类型:set

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。

set常用命令:

命令 行为
sadd 键 元素 元素... 向一个键中添加1个或多个元素
smembers 键 得到这个集合中所有的元素
sismember 键 元素 判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素... 通过键删除一个或多个元素
sinter key1 [key2] 返回给定所有集合的交集(集合中都共有的部分)

set常用场景:

1.存入一列数据,自动去重,且不需要排序,可以用来做身份证信息、手机号码等作为黑名单|白名单

2.因为是无序的,所以可以用来做抽奖系统

3.共同好友查询,使用set

五:value的第五种数据类型:zset

Redis 有序集合(sorted set)和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。


zset的常用命令:

命令 行为
zadd 分数 分数 添加1个或多个元素,每个元素都有一个分数
zrange 开始索引 结束索引 获取指定范围的元素,得到所有的元素,索引是0到-1
zrange 键 开始索引 结束索引 withscores 查询指定的元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores 按照分数倒叙获取指定的元素和对应的分数
zrem 键 值 值 删除一个或多个值
zcard 得到元素个数
zrank 得到元素的索引号
zscore 键 值 得到元素的分数

zset的图示:

zset的常用场景:

因为通过分数来排序,故可以用来点赞排名,或者新浪微博热搜排名等

六:Redis的其他操作

以下操作命令也可以用来操作redis的其他操作,如下:

命令 功能
keys 匹配字符 查询所有的键,可以使用通配符 * 匹配多个字符 ? 匹配1个字符
del 键1 键2 删除任何的值类型,而且可以同时删除多个键
exists 判断指定的键是否存在,不存在返回0 存在返回1
type 判断指定的键,值的类型。返回是类型的名字
select 数据库编号 选择其它的数据库
move 数据库编号 将当前数据库中指定的键移动到另一个数据库中
TTL key 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位 从Redis2.8开始:如果key不存在或者已过期,返回-2;如果key存在并且没有设置过期时间(永久有效),返回-1
flushall redis的flushall命令用来清空redis所有的库,测试可以使用,开发中最好不要用。

因此,基于以上的一些命令是操作redis的基础命令,同时redistribution,还具有以下优点

1. 高性能: Redis是基于内存的存储系统,读写速度非常快,可以达到数十万次/秒的读写性能。

2. 数据持久化: Redis支持数据持久化,可以将数据保存到磁盘上,以防止系统重启或崩溃时数据丢失。

3. 支持多种数据结构: Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,方便存储不同类型的数据。

4. 分布式: Redis支持分布式部署,可以将数据分布在多个节点上,提高系统的扩展性和负载均衡能力。

5. 支持事务: Redis支持事务操作,可以将多个操作放在一个事务中进行,保证操作的原子性。

6. 发布订阅: Redis支持发布-订阅模式,可以实现消息的发布和订阅,方便实现实时通信和消息传递。

7. 简单易用: Redis具有简单的命令和丰富的客户端库,使用起来非常方便。

8. 社区活跃: Redis拥有庞大的开源社区,有很多的第三方库和工具可以使用,可以快速解决问题。  

相关文章
|
26天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
3天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
352 14
|
19天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
6天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
23天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2590 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
5天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
180 2
|
3天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
104 65
|
6天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
321 2
|
23天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1580 17
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码