Redis 数据类型之字符串和列表(三)|学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习 Redis 数据类型之字符串和列表(二)

开发者学堂课程【Redis 入门实战演练 Redis 数据类型之字符串和列表(三)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/653/detail/10836


Redis 数据类型之字符串和列表(三)


 9、查看 key 的过期时间:

tt1#查看 key 的剩余生存时间

-1#负一为永不过期,默认创建的 key 是永不过期,重新对 key 赋值,也会从有剩余生命周期变成永不过期

-2#为没有此 key

num #key 的剩余有效期

127.0.0.1:6379>TTL key1

(integer) -1

10、设置 key 的过期时间:

127.0.o.1:6379>EXPIREkey1 86400

(integer) 1

查看 key 的过期时间,我们之前已经了解了可以设置 key 的过期时间,比如说2000或者3000,查看目前key剩余的过期时间需要使用 TTL 命令。使用 TTL 查看 key 的剩余生存时间,生存时间有三个值,-1为永不过期,就是在默认情况下,即如果在创建 key 的时候没有使用EX增加后面的过期时间值,默认同意使用永不过期的,-2表示是没有该 key,例如输入不存在的一个 key:TTL xxx,则返回值为-2,-2表示没有你想了解的 key 的过期时间;输入TTLname,可以发现返回值为1,表示 name 使用的是默认格式,永不过期。再把刚刚删除的红包 key 重新创建,并且设定为 hongbao 300 ex 86400,即红包的值为300,过期时间为一天。使用TTL查看红包,发现返回值从86400不断一秒一秒地去减,直到这个数减到零,然后就会被自动被 redis 删除。若重新对key进行赋值,也会从有剩余的生命周期变成永不过期,就是在业务当中和开发相关的情况,假如红包之前是300,若把红包的数额改成500,会导致 hongbao 这个 key 生产周期发生变化,他不会继承之前的周期,而是变成无生命周期的 key 或是永不过期的 key。就会导致红包失去意义,就类似于无论是双11还是618的促销活动,活动的红包都是有生产周期的,无论红包的额度有多大,一旦超过了使用期限,红包或是优惠券就会呈灰色状态。而假如说在双十一之前,领导要求将红包的额度增大进行大规模促销,而此时的红包额度以及使用期限(即自动过期时间)早已经在程序中写好了,而且该红包的有效期仅限双11的当天使用,即双11的23点59分59秒,更改额度后,对于双十一当天的限制就不存在了,成为了永不过期形式,用户可以在以后的任意时间段使用该红包。因此在对已设置好自动过期时间的key进行修改时,一定要小心,否则可能会造成无法估计的损失。

11、取消 key 的过期时间:

127.0.0.1:6379>PERSIST key1

(integer) 1

由程序设计的时候来设计数据模式,可以认为是在数据库里面设计的表结构,而数据表结果是由开发来设计的,我们是无法完成的。开发在设计表结构的时候,无论是数据库还是缓存里面的数据,开发需要依据产品提出的需求来定的,即产品部门给开发提需求,而产品部门不需要去了解开发是如何实现所提功能的。当开接到需求之后,就开始进行开发设计,他们的设计包括很多方面,比如设计前端(由美工来完成图片、效果图等方面的任务)、开发(包括前端开发和后端开发,这一部分就是写代码的过程,后端主要写应用程序,大部分通过 Java 来写,后端开发还包括很多方面,有开发数据库的程序员,还有负责 api 的程序员以及写各种接口功能的程序员)完成,整个团队各有分工,最终实现产品部门提出的需求。后期产品部门对产品需求的更改也是十分常见的,一周改一次这是很正常的,因为产品也是根据线下的销售数据进行不断归纳,结合用户的使用反馈来综合考量,并提出修改需求。修改之后开发拿到之后发现和过去这个数据库都不一样了,就需要对数据库进行更改,包括表结构、数据类型等等,更改了数据库之后很可能会涉及到该redis的数据类型或者 redis 的数据,因为 redis 数据的来源是在数据库里面缓存的,但是有些数据是直接写入进来的,通过数据库写入的数据,一旦数据库进行更改,redis里的数据就要跟着进行更改,包括一些字段的修改等等,比如设计师在用户注册的时候,只要求了注册姓名和年龄,后来发现身份证也是注册必填信息之一,就把身份证的需求发给开发,开发就要对其进行程序上的修改。公司的开发开发一般都会写日报、周报、甚至月报以及季度考核等汇报,并将极度规划报备给公司 CEO,因为 CEO 需要了解开发近期的工作是什么。

Section 就是以字符串的形式往 redis 里面写入数据,它写入的数据无论是 section 信息还是缓存信息,写到 redis 之后的数据类型基本上就是在 redis 内存里面,但这个内存是从服务器里面分出来的,在有限的内存空间有限来保存数据。这个数据很有特征,类似于数据库的表,但是又不完全一样,这个数据是一列的,一列是 key 的名称,然后右侧就是值 value,每个 key 都会占据一些内存空间,当然每个 key 所占用的内存很小,每写一个数据就会占据一个空间。

 

三、Redis 数据类型-列表(list)

列表是一个双向可读写的管道,其头部是左侧尾部是右侧,一个列表最多可以包含2^32-1个元素即4294967295个元素。

列表数据类型比较特殊,列表是一个双向可读取的管道,这就意味着它具有一个头部和一个尾部,它的头部在左侧的,尾部在右侧。一个列表最多可以包含,它的意思是:以下述例子为例:假设现有一个列表,该列表是一个双向可读取的管道,类似于地下的管道,在我们的生活里面,地下水道走的是生活用水,但是对这个例子来说,双向管道走的都是数据。数据里面具有各种key、value等信息,均装在池中,假如管子一头的数据是1 2 3 4 5,管子的另一头还有数据,另一头的数据是96 97 98 99……,列表从一头上开始通过程序写数据可以理解为1 2 3 4 5一侧的数据是头,因为我们是从头上开始写数据的,1 2 3 4 5 就是通过程序写入的数据,使用的程序可以是 Java 的,可以是 python 的,也可以是其他语言写的,后续的数据收集会用到 Nginx 这种数据类型,当然那是应用的 Java 所写的,Java 所写的应用程序会收集数据,数据可能是用户输入的,即用户在他的浏览器上登录网站之后,用户信息的界面需要从 redis 里面要查询或写入数据,或者这个数据由 Java 程序在日志收集的时候,日志文件会根据用户的访问而生成,用户一旦访问了某些应用,例如访问 Nginx,就会生成相应的日志文件,Nginx 和日志文件是在同一个服务器的,即Nginx 会在本机记录下一次日志,此时 Java 文件回去监听这个文件,一旦日志文件发生变化,Java 程序就会把日志写到 redis 服务器的管道上。数据在写入的时候是很有特征的,会固定地在某一方向进行书写,且是按照顺序进行写入的,日志文件一旦访问了一条日志,比如日志1,日志1就会由 Java 程序写入,写完之后加入用户又进行了一次访问,这种情况也是十分常见的,就会再产生一条日志,即日志2。日志1和日志2是在不同时间下生成的对应日志假设一个是用户在10点08分访问的,一个是用户在10点09分访问的,在日志2 没有生成之前,日志1是第一个被写入管道的,当用户再次访问且生成了日志2之后,日志2在写入的时候会 把日志1的位置顶替掉。读取的时候是按照顺序进行读取的,第一条日志首先读取,再依次读取第二条日志、第三条日志……如果读取的时候顺序出现混乱,在查看的时候,数据就会出现错位。为了防止读错,Java程序会在尾部再进行读取一次,由于用户的不断访问,日志1也就会不断的后移,可以这样理解,尾部数据进行一次读取,位置就可以空闲出来,即日志1就可以后移一次。可以归纳为一句话,数据在list的读取遵循先进先出的原则,要先被写进去的数据被先读取出来这样的业务逻辑。举例来说,我们在网上购买手机的时候可能会遇到排队的情况,而手机售卖商只有10万部手机,但涌入了30万人进行抢购,而且应用程序也无法一次性处理这么多的连接,就会先往管道里写入5000人,先进入的人一定排在第一位,即我们需要首先处理第一位进入的人购买手机的请求

1、生成列表并插入数据:

127.0.0.1:6379>LPuSH list1 jack tom jhon#根据顺序逐个写入 1ist1,最后的 jhon 会在列表的最左侧。

(integer) 3

127.0.0.1:6379>TYPE list1

List

使用也是非常简单的,需要通过  LPUSH命令来完成

2、向列表追加数据:

127.0.0.1:6379> LPUSH list1 tom(integer) 2

127.0.0.1:6379> RPUSH list1 jack(integer) 3

需要通过 RPUSH 命令来完成

3、获取列表长度:

127.0.0.1:6379> LLEN 1ist1

(integer) 3

通过使用 LLEN 命令来完成

4、获取列表指定位置数据:

127.0.0.1:6379> RPuSH list1 zhang wang li zhao

(integer)4

127.0.0.1:6379> LRANGE 1ist1 1 2#指定范围

1) "wang"

2) "1i"

127.0.0.1:6379>LRANGE 1ist1 2 2*指定位置1)

"Li"

通过 LRANGE 命令进行操作

5、移除列表数据:

127.0.0.1:6379>RPOP list1#最后一个

"jack"

127.0.0.1:6379>LPOP 1ist1#第一个

"tom"

通过 LPOP、RPOP 来进行操作。

相关文章
|
18天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
171 6
|
3月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
110 5
|
3月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
470 2
|
5月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
217 32
|
7月前
|
NoSQL Redis
Redis的常用数据类型有哪些 ?
Redis 有 5 种基础数据结构,它们分别是:string(字符串)、list(列表)、hash(字典)、set(集 合) 和 zset(有序集合)
|
NoSQL Redis
Redis命令——字符串(String)
Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127.0.0.1:6379> SET mykey redis OK redis 127.0.0.1:6379> GET mykey "redis" 在以上实例中我们使用了 SET 和 GET 命令,键为 mykey。
893 0
|
NoSQL Redis
redis必杀命令:字符串(String)
题记: Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下。 redis 127.0.0.1:6379> COMMAND KEY_NAME 字符串命令 序号 命令及描述 1 SET key value 设置指定 key 的值 2 GET key 获取指定 key 的值。
930 0
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
1月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
132 1
Redis专题-实战篇二-商户查询缓存
|
24天前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。