Redis入门篇(1)-类型技能

【从零开始学Redis】基础入门篇--超全总结笔记 黑马Redis课程从入门到精通,超全笔记!!!详细讲解 阅读详情

字符串

首先Redis数据存储都会以key value 的形式进行存放, 所有的key都是字符串类型。此处所说的类型特指的是value中存放的类型。下文所讲的hash、列表都是基于value上进行讲解的。Redis会根据传入字符串类型规则进行判断,并采取相应的内部编码进行存储。数值型会采用8个字节的长整型进行编码存储,小于等于39个字节的字符串采用emstr编码存储,大于39字节的字符串采用raw编码存储。如果需要查看该键对应值的存储类型可运行object encoding k1命令。

  • 常用写命令
// 1. 设置键:k1  值 v1
set k1 v1 
// 2. 与上一个set k1 v1 命令一致,只不过键k1不存在的时候才能设置成功,存在的话将会设置失败
set k1 v1 nx
// 另一种写法
setnx k1 v1 
// 3. 键k1 必须存在才能设置成功
setxx k1 v1 xx 
// 4. 给键 k1 设置 10秒的过期时间
set k1 v1 ex 10
//另一种写法:setex k1 10 v1 
// 5. 给键 k1 设置 1000 毫秒的过期时间
set k1  v1 px 1000
// 6. 批量设置键值
mset k1 v1 k2 v2 k3 v3 
// 7. 对k1中的数值进行自增操作,如果k1中的值类型不为数值类型将会返回错误,如果不存在键k1,会按照初始值0进行自增
incr k1 
// 8. 对k1中的值按2的长度进行自增操作。
incrby k1 2 
  • 常用读命令
// 1. 获取键 k1 的 值
get k1 
// 2. 批量获取 k1,k2,k3 的值
mget k1 k2 k3 k4 

注意:key一般我们都会采用业务名:对象名:属性名的方式进行命名。


哈希

哈希类型在Redis中value是以{{key,value},{key,value}}的形式存储,我们通过字符和哈希类型的存储模型图来更直观的认识它们两者之间的关系,如图1-1
图1-1

Redis对于哈希类型的存储会根据哈希类型个数(对应图中的field个数)采取不同编码进行存储。如果哈希类型个数小于hash-max-ziplist-entries(默认512个)且所有值的(对应图中的value)存储大小都小于hash-max-ziplist-value(默认64字节)那么会使用更加紧凑的ziplist编码进行存储。当无法满足ziplist条件的时候会采用hashtable编码方式进行存储。因为在节省内存方面ziplist比hashtable更优秀,但如果数据量上来后检索效率不及hashtable。

  • 常用写命令
// 1. 给regsiter:user:1 添加一对field:value
hset register:user:1 name zhangmj
//2. 给register:user:1 field(age)的value 增加2 
hincrby register:user:1  age 2
//3. 批量给regist:user:1 设置多个field-value
hmset register:user:1 name 'zhangmoujiang' age 12 
//4. 删除 register:user:1 的name
hdel register:user:1 name
  • 常用读命令
// 1. 获取 register:user:1 的name的value
hget register:user:1 name
// 2. 批量获取 register:user:1 多个field的value
hmget register:user:1 name age 
// 3. 获取 register:user:1对应所有field
hkeys register:user:1
// 4. 获取 register:user:1 对应所有field的value
hvals register:user:1
// 5. 获取 register:user:1 所有 field 和value
hgetall register:user:1 

列表

Redis中列表类型的存储模型如图1-2:
图1-2
列表类型中value最多的存储元素为2^32-1个,可重复。value元素的内部编码根据元素个数和大小会采取ziplist和linkedlist两种编码方式进行存储。当value元素个数小于list-max-ziplist-entries(默认512),同时value中每个元素的大小小于list-max-ziplist-value(64字节)会采取ziplist进行编码。当无法满足ziplist的条件会采取linkedlist编码。ziplist编码对数据进行压缩以减少内存,而linkedlist采用链表的数据结构来存储数据。据说Redis3.2 版本之后提供了一个更合理的内部编码 quicklist,它结合ziplist和linkedlist两者的优势。

  • 常用写命令

为了行文方便 对于从左往右我们用此图标进行标记:➡️, 从右往左用此图标标记⬅️,列表都特指user:1:message

//1. ⬅️给列表插入元素
rpush user:1:message 'piaoliang' '帅气'
//2. ⬅️给列表插入元素
lpush user:1:message 'xx1' 'xx2'
//3. 在元素xx2 之前插入 xx1.5
linsert user:1:message before 'xx2' 'xx1.5'
//4. 在元素xx2 之后插入 xx3
linsert user:1:message after 'xx2' 'xx3'
//5. 从列表左侧弹出元素
lpop user:1:message
//6. 从列表右侧弹出元素
rpop user:1:message
//7. 从左侧弹出元素,如果列表不为空立即弹出,如果列表为空将阻塞3s后返回。
//该命令的基本格式:blpop key [key] timeout ,如果当timeout设为0且列表为空时,客户端运行此命令将会一致阻塞等待下去。
//如果设置了多个key,只要有一个key列表中有元素会立即返回
blpop user:1:message 3 
//8. 同brpop 只不过是 从右侧弹出元素
brpop user:1:message 3


// 9. 从左往右删除列表中等于xx2的2个元素
// 该命令的基本格式为:lrem key count vlaue
// 其中 count > 0 会从左往右删除count个等于value的元素
// count < 0 则会从右往左删除count个等于value的元素
// count =0 则会删除列表中所有等于value的元素
lrem user:1:message 2 xx2
// 10. 保留列表中第2个元素和第4个元素,其他全删除
ltrim user:1:message 1 3 
// 11. 将列表中的第1个元素修改为xxx0
lset user:1:message 0 xxx0

  • 常用读命令
//1. ➡️ 获取 第1个和第2个元素。 
lrange user:1:message  0 1 
//2. ⬅️获取第1个和第2个元素
//  假设列表元素为 g,f,h,k ,那么会获取 h,k 的元素
lrange user:1:message  -1 -2
//3. 获取列表中从右边数,第1个元素
lindex user:1:message -1
//4. 获取user:1:message列表元素的长度
llen user:1:message
// 其中➡️列表元素索引下标 [0,N-1] , ⬅️列表元素索引下标:【-1,-N】N 为列表元素个数
  • 应用场景
  1. 通过lpush + brpop 命令 实现消息队列。
  2. 每个用户都有属于自己的文章列表,需要分页显示各个用户的文章列表。

集合

集合类型的元素是可以重复的,如图1-3为集合类型的存储模型图:
图1-3
集合类型的内部编码有两种:

  1. intset, 当集合类型为整数且数量小于set-max-inset-entries(默认512),会采取该编码方式
  2. 当无法满足intset编码的条件会采取hashtable
  • 常用的写命令
// 1.添加tag1 、tag2 元素
sadd user:1 tag1 tag2 
// 2.删除tag2 元素,返回删除成功的个数
srem user:1 tag2 
// 3.从集合中随机弹出一个元素 / 从集合 随机弹出 n 个元素
spop user:1 
// 4. 将集合【user:1】和【user:2】交集结果存放到destination
sinterstore destination user:1 user:2
// 5. 集合【user:1】 和 集合【user:2】并集结果存放到destination
sunionstore destination user:1 user:2
// 6. 集合【user:1】 和 集合【user:2】差集结果存放到destination
sdiffstore destination user:1 user:2
  • 常用的读命令
// 1.计算元素个数
scard user:1 
// 2.集合中是否存在tag3元素
sismember user:1 tag3
// 3.从集合随机返回一个元素 / 从集合随机返回2个元素
srandmember user:1 / srandmember user:1 2
// 4.获取集合中的所有元素,返回的结果是无序的
smembers user:1

// 5.求 集合【user:1】 和 集合【user:2】的交集
sinter user:1 user:2
// 6.求 集合【user:1】 和 集合【user:2】的并集
sunion user:1 user:2
// 7.求集合间的差集,即:user:2 集合的元素不在user:1中
sdiff user:2 user:1

注意:当集合的元素过多的时候,使用smembers命令会有损性能,建议使用sscan命令来完成。


有序集合

有序集合类型的存储模型如图1-4:
图1-4
它可以类比集合类型和哈希类型的组合,其中value中包含两个主要的字段score和member,member中元素的值不能够重复,而score中元素的类型为整型值能够重复。通过score中元素的值我们能够对member中的元素进行排序。
内部也采用了两种编码:

  1. ziplist (压缩列表)
  2. skiplist (跳跃表)
  • 写操作命令
// 1. 添加集合成员 ,(85 、 zmj)
zadd users 85 zmj
// 2. 添加集合成员 ,存在才能设置成功
zadd users XX 87 zhangmoujiang
// 3. 添加集合成员,不存在才能设置成功
zadd users NX 87 zhangmoujiang
// 4. 删除集合内成员 caonimei
zrem users caonimei
// 5. 给成员xunini增加 1分,如果没有成员会自动添加
zincrby users 1 xuxnini 
  • 读操作命令
// 1. 获取集合内成员数量
zcard users
// 2. 获取集合内zmj成员的分数
zscore users zmj
// 3. 获取集合内chenxiongshun成员分数的排名(分数从低到高)
zrank users chenxiongshun
// 4. 同zrank一样 (分数从高到低)
zrevrank users chenxiongshun
// 5. 返回指定排名的范围的成员(分数从低到高)
zrange users 0 2 [withscores]
// 6. 同zrange一样 (分数从高到低)
zrevrange users 0 1 [withscores]
// 7. 按照指定分数从低到高返回成员
// 基本格式 zrangebyscore key min max [withscores] [limit offset count]
zrangebyscore users 50 90
// 8. 返回指定分数的范围内的成员个数
zcount users 0 100

几个管理键的常用命令

//1. 当前数据库的键数量
dbsize
//2. 随机返回当前数据的一个键
randomkey
//3. 设置键key1 20 秒过期,如果键不存在返回结果为0。
//某个键设置了过期时间,然后执行了set命令,那么该键的过期时间会被清除。
expire key1 20 
//4. 查看key1键还剩几秒过去,返回数字的单位为秒。返回-2 表示已过期
ttl key1
//5. 移除键key1的过期时间
persisit  key1 
//6. 获取所有键,keys后面可接类正则的表达式来匹配键的名称
keys * 
//7. 选择0号数据库,redis中默认有16个数据库 ,编号从0开始...
select 0
//8. 清除当前数据库数据
flushdb
//9. 清除所有数据库数据
flushall

书写技术文章是一个循序渐进的过程,所以我不能保证每句话、每行代码都是对的,但至少能保证不复制、不粘贴,每篇文章都是自己对技术的认识、细心斟酌总结出来的。乔布斯说:我们在这个星球上的时间都很短,很少有机会去做几件真正伟大的事情,同时要做得好,我必须要趁我还年轻的时候完成这些事。
其实我想说的是,我是一枚程序员,我只想在有限的时间内尽可能去沉淀我这一生中所能沉淀下来的东西


清山绿水始于尘,博学多识贵于勤。

我有酒,你有故事吗?

微信公众号:「Java锦囊」。

欢迎一起谈天说地,聊Java。


Redis 10大数据类型(入门篇) 而redis stream提供了消息的持久化和主备赋值功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,环能保证消息不丢失。通过bitfield命令可以一次性操作多个比特位(连续的多个比特位),它会执行一些列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。是用来做基数(不重复的数据)统计的算法,HyperLogLog的有点是,在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定且是很小的。这里所说的类型都是value,key的类型都是字符串。 阅读详情

相关推荐

redis的五种数据类型

(1)Redis(Remote Dictionary Server 远程字段服务)是一个开源的使用ANSI C语言编写、支持网络、科技与内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。(2)Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string、list、set、zset(sorted set --有序集合)和hash。这些数据结构都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

学Java,找哪吒 6万+

Redis

Redis数据类型 Redis是基于Key-value的高性能的NoSql数据库,一种典型的NoSql(Not Only Sql)数据库,NoSql是为了解决性能问题而产生的技术,主要是解决CPU、内存、IO的压力。 NoSql数据库:MemCache、Redis、MongoDB MemCache Redis 持久化操作 不支持 支持 数据类型 key-value 支持更多的数据类型 底层实现技术 多线程+锁 单线程+多路IO复用 常见键操作 命令 注释 备注

qq_44373373的博客 1188

开源网格划分软件-Gmsh二次开发教程 (4)网格生成与控制​

​本章将深入讲解Gmsh的网格生成技术,包括全局/局部网格控制、边界层生成、自适应细化等,并提供完整的代码示例。

ZQGG的博客 1474

31、Redis 7系列:集群(cluster)

31、Redis 7系列:集群(cluster)

Eyesmoon的博客 1634

Wafer的T7 Code是什么,怎么来的

在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么Wafer的T7 Code是一种,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,适用于各种尺寸的晶圆,不仅限于450mm无缺口晶圆7。T7 Code是衬底来料背面通常会有的供应商刻的追溯ID,这是一串数字和字母组成的流水码。

阿拉伯梳子的专栏 7926

YOLO模型使用jupyterlab的方式进行预测/推理(示例)

首先相信很多使用过python的人都或多或少地了解过这个应用。是一个开源Web应用程序,可让用户创建和共享包含实时代码、公式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、等等。而Jupyter Lab则是Jupyter的下一代笔记本界面。是一个基于Web的交互式开发环境,用于Jupyter notebook、代码和数据。非常灵活,可支持数据科学、科学计算和机器学习领域的广泛工作。是可扩展和模块化的,其可编写插件来添加新组件并与现有组件相集成。

ocean00008899的博客 902

Redis系列(四)

1、redis经典五种数据类型及底层实现 1.1、redis分布式锁的实现,其他方式了解吗,对比redis、zk实现分布式锁,这三个从实现方式上和锁竞争上有什么不同? redis按照一个key是否过期+lua脚本实现以及官网推荐redlock算法的落地产品redisson zookeeper按照一个zk里面只可以有且仅有一个znode节点,加锁成功就是建立一个节点,时间到期使用完了,自动删除该节点 两个为了避免单点故障,一般3台机器,zk集群是全体同步才返回消息,redis集群异同通知,容易出现mater

prefect_start的博客 1605

机器学习-02 模型的评估与选择

2.1 误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义: 在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。 在测试集上的误差称为测试误差(test error)。 学习器在所有新样本上的误差称为泛化误差(generalization error)。 显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这

一个小白 1705

Redis01——Redis入门这一篇就够了(可学习、复习、面试,收藏备用)

可以看到这里多了很多redis相关的命令。

2401_84181058的博客 726

【ISAR成像】基于Matlab的飞机点目标模型仿真与图像优化

本文详细介绍了如何使用Matlab进行ISAR成像仿真,重点讲解了从构建飞机点目标模型到生成清晰图像的完整流程。通过模拟雷达回波、距离压缩、运动补偿及方位压缩等核心信号处理步骤,并结合相位梯度自聚焦等优化技巧,有效提升了ISAR图像的清晰度与分辨率。文章还分享了雷达参数调优、加窗处理等实战经验,为雷达信号处理与目标识别研究提供了实用指导。

weixin_29071809的博客 389

【AN7581】AN7581 SDK编译环境搭建操作说明

安装编译需要的工具包。

wgl307293845的博客 338

redis-01 基本命令与原理

redis入门,看这一篇就够了

qq_45800365的博客 256

微信小程序 - 解决web-view嵌套H5网页白屏问题,将h5网页嵌套在webview页面出现无法加载一片空白,详解微信小程序<web-view>页面跳转出现白屏情况(无论本地还是线上H5都能解决)

微信小程序解决web-view打开网页在手机上出现白屏的问题,小程序web-view嵌套H5项目白屏问题分析及解决,使用web-view组件加载H5网页链接后白屏情况,小程序嵌套的h5网页中跳转页面时也有可能出现白屏问题,嵌套webview页面时,出现白屏,WebView 加载不出网页,微信小程序<web-view>页面跳转出现白屏解决方法,解决WebView白屏空白,H5内嵌第三方小程序打开白屏,微信小程序嵌入h5页面加载空白,微信小程序web-view跳转h5白屏,解决微信小程序web-view打开网页

🏆 前端领域优质创作者 1万+

Redis入门篇

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:Redis为了方便我们学习,将操作不同数据类型的命令也做了分组。

2301_80098154的博客 1358

C#实现自己的远程桌面控制工具

1. 创建一个winform工程并添加RDP客户端COM组件。右击工具箱,然后点击选择项,选中下图所示组件并点击确定。为窗口加载时添加自动连接远程桌面代码。3.调试运行程序,验证远程桌面控制。拖放RDP控件到窗口中。2.编写远程桌面连接代码。

6089

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java开发技术之Redis类型技能入门篇

字符串 首先Redis数据存储都会以key value 的形式进行存放, 所有的key都是字符串类型。此处所说的类型特指的是value中存放的类型。下文所讲的hash、列表都是基于value上进行讲解的。Redis会根据传入字符串类型规则进行判断,​​java培训​​并采取相应的内部编码进行存储。数值型会采用8个字节的长整型进行编码存储,小于等于39个字节的字符串采用emstr编码存储,大于39字节的字符串采用raw编码存储。如果需要查看该键对应值的存储类型可运行object encoding k1命令。

m0_58371965的博客 172

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Redis从入门到实战:入门篇

关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。 关于Redis数据库 redis是一种高级的k...

weixin_44176169的博客 2594

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Redis学习——入门篇①

Redis学习——入门篇①

这里有一只小马吖 1650

Redis 入门篇

MysqlOracleDB2SQLServer如果不自己定义序列化器 写入redis里的就是下面这种看不懂的玩意引入 json 依赖--json依赖-->自定义序列化器/** 自定义序列化器 **/@Bean// 创建 RedisTemplate 对象// 设置连接工厂// 创建 JSON 序列化工具// 设置 key 的序列化// 设置 value 的序列化// 返回再次测试结果如下。

人生需要动态规划 学习需要贪心算法 1467

【Redis】Redis入门篇(1)

Redis入门篇(1):涉及到Redis概念、Redis下载安装、命令行操作、Redis数据结构、持久化操作 Redis入门篇(2):了解使用Java客户端操作Redis。 本文目录一.Redis概念1.1 什么是NOSQL1.1.1 NOSQL和关系型数据库比较1.1.2 非关系型数据库的优势1.1.3 关系型数据库的优势1.1.4 小结1.1.5 主流的NOSQL产品1.2 什么是Redis1.2.1 Redis的应用场景二.Redis下载安装三.Redis命令操作,Redis数据结构3.1 redi

算法工程师dongab的博客 342

Redis类型

如果是springboot的话请看springboot创建项目_程程呀是小白的博客-优快云博客,这个是从头开始的还没有学完springboot,一起学习呀!如果是springboot的话请看springboot创建项目_程程呀是小白的博客-优快云博客,这个是从头开始的还没有学完springboot,一起学习呀!如果有哪里不对的话欢迎各位大佬指出问题,本人是一个小白。Sdiff返回两个集合的差集元素(key1中的,不包括key2的)Msetnx是一个原子性的操作,要么一起成功,要么一起失败。...

qq_57785602的博客 3319

【redis初阶】string 类型

string 类型是 Redis 最基础的数据类型,关于字符串需要特别注意:1)首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。2)其次,如图 2-7所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。

qq_52842680的博客 2878

【redis】Redis数据类型(四)Set类型

redis数据类型之Set类型,以及数据结构,使用场景

低调做人,低调编码,神码都是浮云 1599

【入门篇】1.1 redis 基础数据类型详解和示例

Redis概述Redis 是一个开源的在内存中存储数据的结构化键值数据库,它支持多种类型的数据结构,如字符串、列表、集合、哈希、有序集合等。此外,Redis还支持事务、持久化、LUA脚本、LRU清除、自动故障转移等功能。Redis特点性能高效:Redis能读的速度是110000次/s,写的速度是81000次/s,因此被广泛应用于缓存场景。支持多种数据类型:Redis支持最常见的数据类型,为复杂的应用提供了广泛的可能性。数据持久化:Redis可以将数据保存在磁盘上,重启后可以再次加载进行使用。支持消息队列。

日拱一卒无有尽,功不唐捐终入海 1144

【Redis】零基础入门篇

Redis的安装是在Linux,如你没学过Linux,也可以参考我的文章:Linux入门命令大全初始Redis认识NoSQL数据结构维度SQL 数据库NoSQL 数据库数据类型仅支持结构化数据。有固定格式、固定字段、固定类型的数据支持非结构化 / 半结构化 / 结构化全类型。无固定格式、无固定字段数据模型固定表结构(行 + 列)灵活模型(文档、键值、列族、图)结构要求必须先定义表结构,不可随意修改。要加字段必须修改表结构,麻烦。不用提前定义结构,直接存数据。

ashiho的博客 585
上一篇: ReentrantReadWriteLock入门级
下一篇: Redis入门篇(2)- 奇淫技巧
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值