Redis:常用命令

文章目录

  • get和set
  • Redis全局命令
    • keys
    • exists
    • del
    • expire
    • ttl
    • Redis的删除策略

本篇开始对于Redis的命令进行学习,当然只是学习一些常见的

get和set

Redis中是使用键值对来进行存储的,所以get是根据key来取Value的,而set是来设置键值对的

set

set [key] [value]

实例

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set 'key2' "value2"
OK

Redis不区分大小写

get

get [key]
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key100
(nil)

Redis全局命令

keys

Redis可以看成是一个网络版本的哈希表,它支持很多的数据结构,key固定是字符串,但是Value可以是多种多样的数据结构,下面讲述的就是全局命令,可以搭配各种各样的数据结构

keys [pattern]

该命令可以看到的是每一个key的模样,同时也可以允许存在通配符等

pattern是什么?

表示的意思是,一个包含特殊符号的字符串,存在的意义是来描述,找的字符串是什么样子的

h?llo 匹配 hello , hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello
h[a-b]llo 匹配 hallo 和 hbllo

先插入几个键值对:

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 2
OK
127.0.0.1:6379> set hbllo 3
OK
127.0.0.1:6379> set hllo 4
OK
127.0.0.1:6379> set heeeeeeeeeeeeelo 5
OK
  1. ?匹配的是任意一个字符
127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
3) "hbllo"
  1. * 匹配的是0个或者任意字符
127.0.0.1:6379> keys h*llo
1) "hllo"
2) "hallo"
3) "hello"
4) "hbllo"
  1. [abcde]表示匹配这里面的某个选项
127.0.0.1:6379> keys h[abc]llo
1) "hallo"
2) "hbllo"
  1. [^e] 表示排除e,除了e都行
127.0.0.1:6379> keys h[^a]llo
1) "hello"
2) "hbllo"
  1. [a-b] 表示的是a-b范围内的字符都行
127.0.0.1:6379> keys h[a-b]llo
1) "hallo"
2) "hbllo"

注意事项

keys命令的时间复杂度是O(N),所以一般会禁止使用keys,尤其是keys *

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"

Redis是单线程的,所以当执行keys的时候可能会导致阻塞,这是一件不可容忍的事,因此一般禁止

exists

exists key [key ...]
127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"
127.0.0.1:6379> exists hello hallo
(integer) 2

那为什么要这样进行一次请求多个呢?这是考虑到了网络服务,Redis和HTTP的请求响应机制是一样的,这就意味着如果每次都请求,会消耗一定的网络资源,但是如果采用一次去检查多个的情况,就不会这样,相当于会节省一部分的网络资源

del

删除指定key

这个命令相对比较简单,这里就不再进行赘述了,就是一个删除的命令

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"
127.0.0.1:6379> del hllo hallo
(integer) 2
127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"

这里值得注意的是,Redis数据被删除,要看它是否是一个数据库,如果它作为缓存,那问题不算特别大,但是如果是作为数据库,那就相当于在MySQL中丢失了数据,这就是一个比较严重的错误了

针对于Redis的误删数据的错误,要根据具体情况具体分析

expire

expire的作用是给指定的key设置过期时间,key存活时间超过这个指定的值,就会被自动删除

expire key seconds

要注意的是,expire的key值,必须得是已经存在的key值,如果不是存在的key值是不可以被设置过期时间的

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"
127.0.0.1:6379> expire key2 3
(integer) 1
127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"
127.0.0.1:6379> expire key2 3
(integer) 0
127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"

ttl

查询过期时间的命令叫做ttl,全称是time to live

ttl key

表示的是key还剩余的时间,如果返回-2,表示这个值已经不存在了,如果返回值是-1表示这个key还没有关联时间

Redis的删除策略

对于删除来说,到底该选用哪种策略呢?下面给出两种策略

先说一下惰性删除:

假设现在这个key已经到达过期时间了,但是暂时还没删除它,key还是存在的,当下一次进行访问的时候,正好用到了这个key,此时就会让Redis触发删除的操作,并且返回一个nil

下面说一下定期删除:

定期删除,就是在一个定期时间内进行检测,但是定期删除是要有一定条件的,原因在于Redis是一个单线程的程序,如果扫描key的时间太多,就会导致被阻塞,形成的效果和keys * 差不多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql--表管理

mysql–表管理 查看建表语法:help create table; 查看建表语句:show create table xxxx; 查看表结构信息: show columns from xxxx 或desc xxxx; 查看索引信息 : show index from mysql.db; 查看修改表的语法 : help alter table; 添加列 : alter table users add (email…

基于springboot实现的家具销售电商平台

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…

Flutter 中的 GridTile 小部件:全面指南

Flutter 中的 GridTile 小部件:全面指南 在Flutter的Material组件库中,GridTile是一个用于创建网格列表项的组件,它允许开发者以网格的形式展示信息,通常用于展示图片、图标或者一些关键信息。GridTile常用于GridTileBar中&#…

DELL服务器配置ILO(idrac)地址、修改管理员密码

服务器型号:DELL PowerEdge R630 1、重启服务器选择F2进入BIOS 2、重启服务器选择F2进入BIOS 3、选择“Network” 4、配置iDRAC的IP,掩码网关,DNS等信息 5、Esc返回,下滑选择“User Configuration” 6、配置iDRAC的用户名密码以及…

Mybatis INSERT ... ON DUPLICATE KEY UPDATE 语句进行批量插入或更新时

Product.java public class Product {private Integer productId;private String productName;private Integer quantity;// getters and setters ... }ProductMapper.xml <mapper namespace"com.example.mapper.ProductMapper"><!-- 其他的SQL映射和操作…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

WD—C++课前作业—30题

怎么会手和脚都在桌子上 目录 31&#xff0c;声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化&#xff0c;成员函数 void reverse()实现 head 内字符串的逆序存放&#xff0c;成员函数 void print()实现 head 内字符串的输出。…

01基础篇

1、初识 JVM 1.1 什么是 JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。使用…

Linux chkconfig命令教程:管理系统服务的利器(附实例详解和注意事项)

Linux chkconfig命令介绍 chkconfig命令在Linux中用于列出所有可用的服务并查看或更新它们的运行级别设置。简单来说&#xff0c;它用于列出服务的当前启动信息&#xff0c;更新服务的运行级别设置&#xff0c;以及从管理中添加或删除服务。 Linux chkconfig命令适用的Linux版…

Python轻量级Web框架Flask(14)—— 自己做Flask项目总结

0、前言&#xff1a; 本文意在记录自己在做毕业Flask项目开发时遇到的一些问题&#xff0c;并将问题解决方案记录下来&#xff0c;可做日后查询本文也会记录自己做FLask项目时实现的一些功能&#xff0c;作为开发工作的进程记录注意&#xff1a;用Flask开发的前提是已经设计好…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

2024面试算法题目(go)

文章目录 xiaomi xiaomi 1 三数之和 &#xff08;注意去重的边界条件&#xff0c;过几天再刷几次&#xff09; 2 长度最小的子数组 (代码随想录题目&#xff0c;滑动窗口) 3 用链表实现栈 package mainimport ("errors""fmt" )// Node 定义链表节点 type…

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

(delphi11最新学习资料) Object Pascal 学习笔记---第12章第1节 ( 类数据、Virtual类方法和隐藏的self参数)

12.1.1 类数据 ​ 类数据是所有类对象之间共享的数据&#xff0c;提供全局存储但具有类特定的访问权限&#xff08;包括访问限制&#xff09;。您如何声明类数据&#xff1f;只需在类中定义一个标记为“class var”的部分&#xff1a; type TMyData class private class …

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

常类API(Math,System,Runtime)

1、Math 是帮助我们用于进行数学计算的工具类私有化构造方法&#xff0c;所有的方法都是静态的 方法名 说明public static int abs(int a) 获取参数绝对值 public static double ceil(int a)向上取整public static double floor(int a)向下取…

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教学辅助平台的主要使用者分…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…