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

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 本系列文章是根据黑马程序员视频的学习笔记进行学习

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
相关文章
|
3天前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
10 1
|
3天前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
10 0
|
3天前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
7 0
|
3天前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
8 1
|
3天前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
8 1
|
3天前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
8 1
|
3天前
|
存储 监控 NoSQL
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
8 0
|
14天前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
41 4
|
17天前
|
监控 NoSQL 算法
手把手教你如何搭建redis集群(二)
手把手教你如何搭建redis集群(二)
29 1
|
17天前
|
存储 NoSQL 容灾
手把手教你如何搭建redis集群(一)
手把手教你如何搭建redis集群(一)
35 1