首页 > 数据库 >Redis第二课,1.set key value(设置对应的key和value)2.get key(得到value值)Redis全局命令(支持很多的数据结构)3.keys(用来查询当前

Redis第二课,1.set key value(设置对应的key和value)2.get key(得到value值)Redis全局命令(支持很多的数据结构)3.keys(用来查询当前

时间:2024-03-21 20:01:15浏览次数:30  
标签:过期 Redis redis value keys key

Redis的启动 

redis-cli

目录

1.set key value(设置对应的key和value)

2.get key(得到value值)

Redis全局命令(支持很多的数据结构)

3.keys(用来查询当前服务器匹配的key)

生产环境/线上环境

4.exist(判定key是否存在):判定key是否存在​编辑

5.DEL   key  返回删掉的key的个数​编辑

6.expire作用给指定的key设置过期时间

7.ttl key查看当前键的剩余时间

redis key过期策略的实现(面试题)


因为redis本质是键值对结构。

1.set key value(设置对应的key和value)

2.get key(得到value值)

这里我们是没有这个key3的,所以他返回一个nil(null的含义)

Redis全局命令(支持很多的数据结构)

3.keys(用来查询当前服务器匹配的key)

通过一些特殊符号(通配符)来描述当前key的模型

如何查找key呢? pattern包含特殊符号的字符串,存在的意义,描述另外的服务器长啥样,?匹配任意一个字符,*匹配0个或多个字符。

*:保证的

?保证一个占位符,他就像是like里面的_

key复杂度O(N),生产环境一般禁止用keys命令,因为生产环境上key可能非常多,redis作为一个单线程的服务器,很容易执行keys*时间非常长,就会使redis服务器被阻塞了,无法给其他客户端提供服务。

redis常常用于缓存,redis挡在mysql前面,redis被keys*阻塞住,此时其他的查询redis操作就超时了,突然一大波请求过来,mysql也会挂

生产环境/线上环境

(办公环境/开发环境,测试环境也叫线上环境,外界用户无法无法访问,线上环境是外界用户能够访问到,一旦生产环境出问题,一定对用户的使用产生影响)

4.exist(判定key是否存在):判定key是否存在

Exist key[key ...]

网络通信->效率比较低

                ->成本比较高

hashMap中key唯一,但可以判定多个key,要是1个key则非0则1.

redis支持很多数据结构

自身这些键值对,是通过哈希表方式来组织的:

Redis具体的某个值,又可以数据结构

redis是一个客户端,服务器结构的程序,客户端和服务器之间通过网络来进行通信

进行网络通信,发送方发送一个数据,这个数据要从应用层,到物理层,层层封装(每一层协议都要加上报头或尾)->发一个快递,要包装,包好几层

del:删除指定的key,可以删一个或者多个

5.DEL   key  返回删掉的key的个数

redis主应用场景:缓存(数据库,消息队列),只是一个热点数据

(redis替mysql负重前行,redis没数据,大部分请求就直接打给mysql易把mysql搞挂)

6.expire作用给指定的key设置过期时间

注意:如果expire key 的键不存在,返回结果为0

如果过期时间为负值,键会立即被删除,犹如使用del命令一样

7.ttl key查看当前键的剩余时间

redis key过期策略的实现(面试题)

redis同时可能存在很多很多的key,这些key中可能很大一部分都有过期时间,此时redis怎么知道哪一部分过期被删除,哪些key还没过期呢?

倘若是直接遍历所有的key,显然是行不通的,效率非常低

redis的整体策略

1.定期删除

每次抽取一部分,进行验证过期时间,保证这个抽查过程足够快,

为啥对定期删除的时间,又明确要求呢?

因为Redis是单线程程序(主要的任务,处理每个命令的任务,刚才扫描过期的key)

如果扫描过期的key消耗的时间太多了,就可能会导致正常处理请求的命令被阻塞(类似于key* 这样的效果)

2.惰性删除

假设这个key到了过期时间,但是暂时未删除它,key还存在,紧接着后面又一次的访问,正好用到这个key,于是这次访问会让Redis触发删除key的操作,同时返回个nil

整体的效果一般仍有过期的key 未被删除,redis还提供了一系列内存淘汰策略。

标签:过期,Redis,redis,value,keys,key
From: https://blog.csdn.net/weixin_72953218/article/details/136544165

相关文章

  • Ubuntu部署Maxkey单点登录认证系统
    1:基础环境ubuntu-23.10-live-server-amd64.isoDockerversion24.0.5,build24.0.5-0ubuntu1MaxKey-v4.0.2-GA2:Git克隆远程仓库到本地gitclonehttps://gitee.com/dromara/MaxKey.git3:安装MaxKey3-1:进入/root/MaxKey/docker目录cd/root/MaxKey/docker3-2:查看/root......
  • 记一次Redis报错问题
    问题描述在Spring项目中使用了@Cacheable注解并且将缓存放入redis,当从Redis读取缓存时提示了反序列化异常,无法构造UnmodifiableMap,没有默认的构造函数CouldnotreadJSON:Cannotconstructinstanceof`org.apache.commons.collections4.map.UnmodifiableMap`(noCreators,......
  • redis——集合,有序,慢查询, pipline与事务, bitmap ,HyperLogLog geo
    集合类型(set)saddkeyelement#向集合key添加element(如果element存在,添加失败)o(1)sremkeyelement#从集合中的element移除掉o(1)scardkey#计算集合大小sismemberkeyelement#判断element是否在集合中srandmemberkeycount#从集合中随机取出count个元素,不会破坏集......
  • golang使用redis锁(避免误解锁/死锁/过期引起并发):go-redis, redigo
    【go-redis】简单实现方式,不会死锁/误解锁packagemainimport("context""fmt""sync""time"redis2"github.com/redis/go-redis/v9")varmutexsync.Mutex//redis加锁sec:锁定秒数(避免死锁),value锁唯一值(避免误解......
  • 分布式锁中的王者方案 - Redission
    文章目录5.1分布式锁-redission功能介绍5.2分布式锁-Redission快速入门5.3分布式锁-redission可重入锁原理5.4分布式锁-redission锁重试和WatchDog机制5.5分布式锁-redission锁的MutiLock原理5.1分布式锁-redission功能介绍基于setnx实现的分布式锁存在......
  • 解决SpringBoot环境下Redis哨兵模式连接失败问题,“NOAUTH Authentication required”
    io.lettuce.core.RedisCommandExceptionException:“NOAUTHAuthenticationrequired”在某行工作,项目上线代码,uat环境无异常,上到pp环境有问题,报redis连接不上;观察配置,发觉是apollo的配置是哨兵模式,有个哨兵密码。spring2.2.6RELEASE版本问题。于是写了全局配置,读取配置中......
  • 询问ChatGPT4,改造TodoList:把本地存储的localStorage修改成PHP+Redis
    这里照搬的是:免费极简设计网页版Todo  https://www.ricocc.com/todo/非常感谢原作者Rico。我很喜欢这个设计和风格,但是可惜只能本地存储,我又不想使用微软的TODO,登录倒无所谓,但是数据同步问题很大,实在头痛,所以放弃。我是菜鸟,只是刚好前段时间安装了Apache、PHP的一键安装包和......
  • 【已解决】null value in column “XXX“ violates not-null constraint当我数据库的
    报错信息:nullvalueincolumn"id"violatesnot-nullconstraintDetail:Failingrowcontains(11110,1,null) 一般来说,是因为插入的主键Id为空引起的。这就和我们数据库中的设置默认值产生了冲突,我设置了默认值,为什么他还是报这个字段不能为空的错误?这个时候就要......
  • BigKey问题
    当AOF日志写入了很多的大Key,AOF日志文件的大小会很大,那么很快就会触发AOF重写机制。当AOF写回策略配置了Always策略,如果写入是一个大Key,主线程在执行fsync()函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。......
  • Redisson-RTopic
    RTpoic简介:RTpoic是Redisson提供的用于实现发布-订阅(Pub/Sub)模式的类,它封装了 Redis 的发布和订阅功能,让开发者能够轻松地在分布式环境中进行消息的发布和订阅。实际上类似于Kafka、RocketMQ等一系列MessageQueue的生产-消费关系。自产自销:简单的说,可以实现一个服务中,自己......