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

相关推荐
小菜yh2 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
Microsoft Word22 分钟前
数据库系统原理(第一章 数据库概述)
数据库·oracle
问道飞鱼26 分钟前
分布式中间件-Pika一个高效的分布式缓存组件
分布式·缓存·中间件
华为云开源32 分钟前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
kejijianwen4 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
高兴就好(石7 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆7 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构