
语法:
exists key [key...]
# 返回值:key 存在的个数key 来说,是非常有用的
Redis 组织这些 key 就是按照哈希表的方式来组织的。Redis 支持很多数据结构指的是 value 可以是一些复杂的数据结构
Redis 自身的这些键值对,是通过哈希表的方式来组织的,Redis 具体的值,又可以是一些数据结构
Redis 是一个客户端-服务器结构的程序,客户端和服务器之间通过网络来进行通信Redis 客户端包装成一个请求,发送给 Redis 服务器,服务器再返回响应[!qoute] 封装和分用
CPU 的Redis 自身也非常清楚上述问题,所以 Redis 的很多命令都支持一次就能操作多个 key 的/多种操作
可以一次删除一个或者多个
语法:
del key [key...]key 的个数在
MySQL中,删除类的操作
drop databasedrop tabledrop from…
这些都是非常危险的操作,一旦删除之后,数据就没了。但在 Redis 中,危险程度就小很多了MySQL 中。如果把 Redis 中的 key 删除了几个,问题不大,大不了再从 MySQL 中读就可以了。Redis 帮 MySQL 负重前行,Redis 没数据了,大部分请求就直接打给 MySQL 了,然后就容易把 MySQL 搞挂MySQL 这样的数据,哪怕误删了一个数据,都可能影响是很大的Redis 作为数据库,此时误删数据的影响就大了单位为秒
key 存活时间超过这个 expire 指定的值,就会被自动删除
Redis 中,将 expire 设置为 60,等到一分钟后 Redis 里面的验证码信息被删除,就查询不到了Redis 实现分布式锁,为了避免出现不能正确解锁的情况,通常都会在加锁的时候设置一下过期事假(所谓的使用 Redis 作为分布式锁,就是给 Redis 里写一个特殊的 key value)语法:
expire key seconds
pexpire key 毫秒time to live
在网络原理,
IP协议报头中,就有一个TTL字段
IP 中的 TTL 不是用时间衡量过期的,而是次数查询当前 key 的过期时间还剩多少 语法:
ttl key //秒
pttl key //毫秒-1 表示没有关联过期时间-2 表示 key 不存在#高频面试
一个 Redis 中可能同时存在很多很多 key,这些 key 中有很大一部分都有过期时间。此时,Redis 服务器怎么知道哪些 key 已经过期要被删除,哪些 key 还没过期?
key 已经到达过期时间了,但是暂时还没删除它,key 还在key,于是这次访问就会让 Redis 服务器触发删除 key 的操作,同时再放回一个 nil但显然,单靠惰性删除肯定是不靠谱的,一个超市这么多商品,怎么可能全去靠用户去检查,所以肯定还得要有一个辅助的机制——定期删除
这个超市老板,要定期查看超市里面的商品,看是否有过期产品
为什么这对定期删除的时间有明确的要求呢?
Redis 是单线程程序,主要的任务是处理每个命令的任务(刚才扫描过期 key…)key 消耗的时间太多了,就可能导致正常处理请求命令就被阻塞了(产生了类似 key * 的效果)虽然有了上述两种策略结合,但整体的效果仍一般。仍然有可能会有很多过期的 key 被残留了,没有及时删除掉
但是 Redis 为了对上述进行补充,还提供了一系列的内存淘汰策略