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(即优先级队列 或者基于时间轮都可以实现高效的定时器)

相关推荐
爱学习的白杨树10 分钟前
MySQL中有哪几种锁?
数据库·mysql
007php00714 分钟前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang
晴天飛 雪17 分钟前
Grafana监控PostgreSQL
数据库·postgresql·grafana
斗-匕17 分钟前
Spring事务管理
数据库·spring·oracle
一行玩python1 小时前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
MXsoft6181 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
TheITSea1 小时前
云服务器宝塔安装静态网页 WordPress、VuePress流程记录
java·服务器·数据库
王ASC2 小时前
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。ojdbc8版本23.2.0.0驱动BUG【已解决】
数据库·sql·oracle
Dlwyz2 小时前
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
数据库·redis·缓存
如意机反光镜裸3 小时前
如何快速将Excel数据导入到SQL Server数据库
数据库