redis——基本命令

什么是Reids(REmote Dictionary Server)

  • Redis是现在主流的数据库之一,是一个使用ANSI C编写的开源、包含多种数据结构、支持网络的、基于内存、可选持久性的键值对存储数据。

特性

1.速度快

  • :Redis的数据全部存储瑜内存中。 可以通过下面的表来对比一下
  • Redis的核心功能都是比较简单的逻辑,核心功能都是比较简单的数据结构来实现的
  • 从网络角度上来看,Redis使用了"IO多路复用的方式"
  • Redis使用的是单线程模型,减少了锁之间的冲突

基于键值对的数据结构

几乎所有的编程语言都提供了类似字典的功能,例如C++中的map,java中的map等,类似于这种键值对的方式,与很多键值对不同的是,Redis中的值不仅可以是字符串,还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率。

3.丰富的功能

  • 提供了键过期功能,可以用来实现缓存
  • 提供了发布订阅的功能,可以用来实现消息系统
  • 支持Lua脚本功能,可以利用脚本创造出Redis命令
  • 提供了简单的事务功能,能在一定程度上保证事务特性
  • 提供了流水线功能,这样客户端 能将一批命令一次上传到Redis中,减少了网络的开销

4.持久化

通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化⽅式:RDB和AOF,即可以⽤两种策略将内存的数据保存到硬盘中,这样可以保证数据的可持久性。

当然Redis还有很多的特性,可以去官网上看看。

基本全局命令

set

  • 将key和value存储进去

注意一点就是key都是string,但是value可以是多种类型

get

  • 根据key获取对应的value
  • 如果当前的key不存在,就返回nil

keys

  • 返回所有满足样式的key。支持通配符匹配
  • 时间复杂度:O(N)

通配符匹配规则:

  • ?:匹配一个字符
  • *:匹配0个或者多个字符
  • [a,b]:匹配a到b的字符
  • [^e]:匹配除了e的字符

下面是例子

  • h?llo 匹配 hello , hallo和 hxllo
  • h*llo 匹配 hllo和 heeeello
  • h[ae]llo匹配 hello和 hallo但不匹配 hillo

注意的是keys的时间复杂度是O(N)

所以在生产环境中,禁止使用keys * 来查询所有的key。

  • 因为redis是一个单线程的服务器,执行keys*的时间非常长,就使redis阻塞住了,无法给其他客户端提供服务了。
  • redis经常被用来做缓存,挡在数据库的前面,如果redis因为keys*阻塞住了,那么当一大批请求过来的时候,mysql就很容易挂掉。

exists

使用方法: EXISTS key [key ...]

  • 判断某个key是否存在
  • 时间复杂度:O(1)
  • 返回值:key存在的个数

DEL

删除指定的key

使用方法:DEL key [key ...]

  • 时间复杂度:O(1)
  • 返回值:删除掉key的个数

EXPIRE

为指定的key添加秒级的过期时间

使用方法: EXPIRE key seconds

  • 时间复杂度:O(1)
  • 返回值:1表示成功,0表示设置失败

TTL

获取指定key的过期时间,秒级

使用方法:TTL key

  • 时间复杂度:O(1)
  • 返回值:剩余过期时间。-1表示没有关联的过期时间,-2表示key不存在


图解过期机制:

type

返回key对应的数据类型

使用方法:TYPE key

  • 时间复杂度:O(1)
  • 返回值:none,string,list,set,zset,hash和stream

redis中的过期策略

redis的key过期策略如何实现的? 一个redis中可能同时存在很多key,这些key中可能有一大部分都有过期时间,此时,redis服务器怎么知道key已经过期了呢??

redis整体的策略

  • 定期删除:
  • 惰性删除

定期删除

结合定期删除操作。

惰性删除

假设这个key已经到了过期时间,但是暂时不用删除它,key还存在,当下一次访问的时候,用到这个key的时候,会让redis触发删除机制,同时分会一个nil

关于定时删除的功能,其实redis中没有采用定时器 的方式来实现定期删除key。

如果有多个key过期了,可以采用通过一个定时器的来高效/节省CPU的前提下处理多个key(即优先级队列 或者基于时间轮都可以实现高效的定时器)

相关推荐
Hacker_LaoYi2 分钟前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀4 分钟前
Redis梳理
数据库·redis·缓存
独行soc4 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天39 分钟前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
工业甲酰苯胺1 小时前
分布式系统架构:服务容错
数据库·架构
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain2 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship2 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站2 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle