当前位置:网站首页 > 云计算与后端部署 > 正文

连接redis(连接redis客户端命令)



redis是一个客户端-服务器结构的程序。redis客户端和服务器可以在一台机器上,也可以在不同主机上。客户端和服务器之间通过网络进行通信。

在这里插入图片描述

Redis的客户端有很多形态,比如

  1. redis-cli是Redis服务器自带的命令行客户端。通过命令或命令进入客户端并连接到服务器。ctrl+d退出。
    在这里插入图片描述
  2. 图形化界面的客户端。比如桌面程序,web程序。
  3. 基于redis的api自行开发客户端。

和内存中的操作变量比,就慢了。
redis在内存存储管理数据是先通过网络,再操作内存。同时redis可以把数据单独、持久化存储,服务器重启,并不会影响数据内容。而变量是直接操作内存,重启服务器后数据就没了。
在这里插入图片描述

通过redis-cli客户端和redis服务器交互,涉及到很多redis命令。大概是上百个吧。常用的掌握,不常用的在用到的时候查阅官方文档。

redis官方地址:
进入官网后,继续进入社区版
在这里插入图片描述然后在搜索框中输入命令,
在这里插入图片描述
进入命令的官方文档:
在这里插入图片描述

set命令

set命令:把key和value存储到redis中。key和value都是字符串

总结set的用法:

  1. :把键值对<字符串1-字符串2>存到redis中。键和值加不加引号无所谓。
    在这里插入图片描述

get命令

get命令:根据key来取value。

总结get的用法:

  1. :通过键1取它对应的值。如果键1不存在,返回nil。nil就是null/NULL的意思。
    在这里插入图片描述
    在这里插入图片描述

redis通过数据结构组织数据。体现在两个方面:

  1. redis自身的这些键值对,是通过哈希表的方式来组织的。
  2. 在键值对中,key固定就是字符串,value实际上有很多数据类型,最常见的五种类型:字符串,哈希表,列表,集合,有序集合。操作不同的数据结构就会有不同的命令。

全局命令:能够搭配任意数据结构使用的命令。

keys命令:查询当前服务器上的key

命令:通过通配符描述key的样子,服务器中匹配上述样子的key就能被查询出来。

总结keys的用法:

  1. :pattern是包含通配符的字符串。在服务器中查询能匹配pattern的所有key。
    patter的具体写法:
    :匹配任意一个字符;
    :匹配任意个字符;
    :只能匹配a或e,其他字符不行,相当于给出固定选项;
    :排除e和a,只有e和a匹配不了,其他的都能匹配;
    :a到b区间的都能匹配,包括a和b。
    比如:
    在这里插入图片描述在这里插入图片描述keys命令的时间复杂度是O(N),redis执行命令时用的是单线程模型,所以如果redis中存储的key非常多,那么执行keys命令的时间会很长,会导致redis服务器堵塞,无法给其他客户端提供服务。
    所以在生产环境中使用keys命令是危险操作
  2. :查询当前服务器上的所有key。
生产环境

生产环境也叫线上环境。线上环境是外界用户能访问到的。

办公环境,开发环境,测试环境,统称为线下环境,外界用户无法访问。

一旦生产环境出现问题,会直接对用户使用产生影响。

exists命令:判定key是否存在

exists命令能一次性查一个或多个key是否存在。
redis组织key是按照哈希表的方式来组织的。所以 exists命令的时间复杂度是O(1)。
总结exists的用法:

  1. :查询服务器中是否存在键key1,键key2,键key3,返回key存在的个数。
    在这里插入图片描述
    在这里插入图片描述
    一次查多个效率比较高。这主要是因为redis客户端和服务器之间通过网络进行通信。
    每次网络通信都要对数据进行封装和分用,还是很花时间的。
    而且在网络通信中是通过网卡进行数据传输等工作的,网卡属于IO设备,IO设备的效率低于内存,CPU。
    一般情况下,Redis客户端和服务器还不定在一台机器上,此时网络传输消耗的时间也更多了。
    Redis的很多命令都支持一次能操作多个key

del命令:删除指定的key

同exists命令,del命令能一次删除一个或多个key。del命令的时间复杂度也是O(1)。

总结del的用法:

  1. :删除服务器中键key1,键key2,键key3,返回删除掉的key的个数。
    在这里插入图片描述

expire命令:为指定的key设置过期时间。

总结expire命令的用法:

  1. :为key1设置过期时间,xxx秒后,key1被自动删除。返回0设置失败,返回1设置成功。key1必须存在。
    在这里插入图片描述

通过pexpire命令也可以为指定的key设置过期时间。使用方法同expire,区别是设置的时间单位是ms。

ttl命令:查询指定key的过期时间

ttl 全称 time to live,即存活时间。

  1. :查询key1的过期时间还剩多少,时间单位是s。返回值如果是-1表示该key1没有设置过过期时间,返回值如果是-2表示该key1不存在。
    在这里插入图片描述

pttl和ttl命令一样,区别是时间单位是ms。

type命令:查看key对应value的数据类型

type的命令的时间复杂度也是O(1)。

总结type的用法:

  1. :查看key1对应value的数据类型。如果key1不存在,返回值是none。
    在这里插入图片描述
    在redis中,操作不同数据类型的value的命令完全不同。操作前就可以先type一下。

一个redis中同时存在很多的key,这些key中可能有很大一部分都有过期时间,此时,redis服务器是如何知道哪些key已经过期要被删除,哪些key还没过期的。

直接遍历所有的key,效率太低行不通。

redis中采取的基本策略是:定期删除和惰性删除结合

惰性删除:假设key1已经到了过期时间,但是redis并没有删除它。直到key1接下来被访问到时,才会触发redis服务器删除key1的操作,并返回给客户端一个nil。

定期删除:redis每隔一段时间抽取一部分key检查它们的过期时间,对过期key执行删除操作。在这个过程中,控制每次抽取检查的数量,保证定期删除的过程要足够快。redis处理主要任务都是使用单线程模型,如果扫描过期key消耗时间太长,会导致redis正常处理命令被阻塞。

通过上述策略,依然可能存在有很多过期的key被残留,不能及时删除掉。为了解决这个问题,redis中还提供了一系列的内存淘汰策略。

定时器:在某个时间到达之后,执行指定的任务。

实现一个定时器,有以下两种比较高效的方式:分别是基于优先级队列(堆)和时间轮。

基于优先级队列实现定时器:现假设redis服务器中有很多设置了过期时间的key,把这些key加入到一个优先级队列中,指定优先级规则是过期时间早的先出队列。此时队首元素就是最早的要过期的key,给定时器中分配一个线程(多线程),让这个线程去检查队首元素,看队首元素是否过期,这个线程不需要频繁扫描队首元素,只要根据当前时刻和队首元素的过期时间,设置一个等待,当等待时间结束后,系统唤醒这个线程,这个线程去检查队首元素即可。

上述两种方案都涉及到了多线程,Redis中没有采取上述两种方案。

  1. redis中六个常用的全局命令:
  • keys:查看匹配规则的key
  • exists:判定指定key是否存在
  • del:删除指定的key
  • expire/pexpire:设置过期时间
  • ttl/pttl:查看key的过期时间
  • type:查询key对应的value类型
  1. 两个核心命令:
  • set:把key和value存储到redis中。
  • get:根据key来取value
  1. 在生产环境中使用keys命令是危险操作。特别是。
  2. Redis中针对key的过期策略:定期删除+过期删除+内存淘汰机制三者结合。
  3. 定时器的两个高效实现思路:基于优先级队列实现和基于时间轮实现。
到此这篇连接redis(连接redis客户端命令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • redis 6380端口(redis-cli 端口)2025-03-12 23:54:07
  • 电脑软件安装程序后缀(电脑软件安装程序后缀是什么)2025-03-12 23:54:07
  • 跨域解决方案(前后端跨域解决方案)2025-03-12 23:54:07
  • docker发布时间(docker一般部署什么)2025-03-12 23:54:07
  • 鸿蒙系统软件后缀(鸿蒙系统应用后缀)2025-03-12 23:54:07
  • redis查看端口(查看redis的key)2025-03-12 23:54:07
  • oracle默认端口号是多少(oracle默认开放端口)2025-03-12 23:54:07
  • 预训练模型怎么微调(预训练模型微调之后效果不好)2025-03-12 23:54:07
  • udp广播报文(udp 广播端口)2025-03-12 23:54:07
  • 服务器部署步骤(服务器部署命令)2025-03-12 23:54:07
  • 全屏图片