Redis学习2:课程安排、数据类型String操作及拓展操作和Key的设置约定

简介: 本系列文章是根据黑马程序员视频的学习笔记进行学习

Redis学习课程计划


本系列文章是根据黑马程序员视频的学习笔记进行学习

f0a76acedbf79d8610f4f7fd439eea91_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_10,color_FFFFFF,t_70,g_se,x_16.png


数据类型介绍


业务数据的特殊性

最初定位是缓存来使用。

1、原始业务功能设计(秒杀方面、618、双11、12306等高数据并发)


2、运营平台监控到的突发高频访问数据

意思就是说最开始并不知道新闻是热点,一开始关注不到,但是可以监控到高频词了,所以可以加入到Redis中了。


3、高频、复杂的统计数据

比如说直播的在线人数、偶像团的投票刷票等等(实时刷新、快速响应)


附加功能

1、系统功能优化或者升级

比如说单服务群升级集群、session管理、token管理等。

994b74abed96b208f37ff25c5c262553_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_8,color_FFFFFF,t_70,g_se,x_16.png

数据类型(5种常用的)

右边是可以对应成java中的数据类型。


Redis存储数据格式

本身是一个Map,所有的数据都是采用的key:value的形式存储。

f5a0595c52116724bc9855e868f85e8d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_10,color_FFFFFF,t_70,g_se,x_16.png

左边是string,右边才是数据类型。左边永远是string,没有什么操作的。

String类型简介


0048591efc73c0b311deaace139a08c0_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_16,color_FFFFFF,t_70,g_se,x_16.png


string的基本操作

4e34f67ce279f0660ec11ff95c2298e7_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png

返回的 1和0 要分清楚!一个是成功 一个是失败。


一次设置多个、一次取多个

c48a78282e200950a177d200a37f3737_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

m的意思是multi…的一个单词,意思是多的意思。

482aa01231976603e2974da4b1cde910_d290902611524ce8abcda9ce4b134624.png

原本的age是200,追加了之后变成了200300,所以是返回的6。如果不存在那么就直接新建了。


单数据操作与多数据操作的选择困惑

一次是set,一次是mset。需要复原这个操作的实现过程有什么区别。

def149f79b947067fb19c037dfd575b9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

set指令发送过去要消耗时间,redis执行要时间,返回result也要时间。

96f1309a0671bc725a1479f6c39f48ed_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

所以需要均衡发送时长、执行时长之间的关系。


一次发1亿条,那就需要切成100万条,发100次,就是需要理清楚对应的需要关系。


如果只需要发2个,那么肯定没什么差距。

所以没有什么明确的指令说明有什么区别。


如果一次性发很多,一定要进行切割,不然就没意义了,容易卡死。


string类型数据的拓展操作


99b2a43a6df76e52f9ab355c79ca7dec_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

8f69f50739f3774a914b44e67225ade2_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


incr key 是增加一个 deor key 是减少一个单位

incrby key 10 增加10个单位 decrby key 10 减少是个单位

incrbyfloat key 1.5 是可以增加1.5个单位

incrby 和 decr 后面增加+ -符号 也可以做加减的操作的!

899150c93d80468acbd3a1df10e6798f_7e85ea4003864acbb717f5f72b6140ff.png

fa85e1f559c98ad7fcd1d6d7ea81affe_15885b9157e94a0fb8f170ffecc6e195.png


这个就是不是一个整数或者超出范围。

142e7ea7b586385dad2ca7efb5ad5544_8ab4ab79e48a426ab017877bc20f0297.png

拓展操作:数据的时效性

7d178481c8a4a811c9f333eed54b6749_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

设置数据具有指定的生命周期!

5523efafcc87e3afbc0897446d86f7aa_7a07b863cce440bdadc03dc7a98c42ab.png

如果先设直setex进行秒数的设置,然后再进行一个set的普通设置,那么就会自动进行普通设置的,不会再有秒数了。

所以可以通过数据是否失效控制业务行为!

string数据类型操作的注意事项

545c770f2c8665ea721dfd9a672d5f20_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_9,color_FFFFFF,t_70,g_se,x_16.png


同时注意数值的最大范围!

java中是long的范围!

9043998420763ca0fdb17b5ce290381f_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_13,color_FFFFFF,t_70,g_se,x_16.png

59fd31b778d0b51f2dcabc9765d87fc6_07ef39ae54fc44519487590e842925d8.png

mysql用下划线分割,但是redis中是冒号

7f5110bad3a841fa87333b24ef03ba46_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


第一种方便操作,但是第二种是一改全改需要全改,但是方便查看。

所以需要根据使用场景来看。


key的设置约定

6e87e552aff5d793ce3e1756bda2acef_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_13,color_FFFFFF,t_70,g_se,x_16.png

相关文章
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
942 6
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
921 61
Redis应用—6.热key探测设计与实践
|
NoSQL 测试技术 Redis
Redis批量删除Key的三种方式
Redis批量删除Key是优化数据库性能的重要操作,本文介绍三种高效方法:1) 使用通配符匹配(KEYS/SCAN+DEL),适合不同数据规模;2) Lua脚本实现原子化删除,适用于需要事务保障的场景;3) 管道批量处理提升效率。根据实际需求选择合适方案,注意操作不可逆,建议先备份数据,避免内存溢出或阻塞。
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
345 7
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
存储 监控 NoSQL
Redis大Key问题如何排查?如何解决?
Redis大Key问题如何排查?如何解决?
916 0
Redis大Key问题如何排查?如何解决?
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
246 4
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
1871 3
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
244 1