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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本系列文章是根据黑马程序员视频的学习笔记进行学习

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
10天前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
6天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
15 1
|
26天前
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
31 1
|
26天前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
36 1
|
1月前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
46 3
|
1月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
52 1
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
70 6
|
4天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
6天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构

热门文章

最新文章