Redis: Redis介绍

news2024/11/27 12:41:33

文章目录

  • 一、redis介绍
  • 二、通用的命令
  • 三、数据结构
    • 1、字符串类型(String)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 2、列表(List)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 3、集合(Set)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 4、哈希(Hash)
    • 5、有序集合(Zset)

一、redis介绍

redis是一个基于内存的键值型NoSQL数据库,具有如下特征:

  • 键值型,value可以执行多种不同的数据结构string、list、set、hash和zset等功能丰富。
  • 单线程操作,每个命令都具有原子性
    • 所谓的原子操作值的是不会被线程调度机制打断的操作,这种操作会一直运行到结束,中间不会进行线程切换。对于原子操作的理解可以分为如下两种:
      • 在单线程中,能够在单条指令中完成的操作就是原子操作。中断只发生于指令之间。
      • 在多线程中,不会被其他线程打断的操作就是原子操作。
  • 高性能,低延迟、速度快(基于内存、IO多路复用)
  • 高可用,具有主从、集群和哨兵模式
  • 支持java、c和python等多种语言

二、通用的命令

Redis命令官方地址:https://redis.io/commands,有如下通用的命令:

  • help [command]
    查看一个命令的具体用法
    在这里插入图片描述
  • keys *
    查看库中的所有key或符合模板的所有key。
    在这里插入图片描述
  • DEL [command]:
    删除一个指定的key
  • exists key
    判断某个key是否存在。
  • move key db 当前库就没有了,被移除了。
  • expire key 秒钟
    为给定的key设置过期时间。
    在这里插入图片描述
  • ttl key
    看还当前key还有有多少秒过期,-1表示永不过期,-2表示已过期。
    在这里插入图片描述
  • type key 查看你的key是什么类型。
  • select
    切换数据库
  • dbsize
    查看当前数据库key的数量
  • flushdb
    清空当前库
  • flushall
    清空全部库
  • unlink key
    根据key选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作

三、数据结构

常用的五大数据结构。

1、字符串类型(String)

(1)介绍

该类型是redis中最简单的存储形式,其value是字符串,可分为三种:

  • String:普通的字符串类型
  • int:整型类型,可以进行加减操作
  • float: 浮点型,可以进行加减操作

(2)常用命令

  • set
    添加或者修键值对
    在这里插入图片描述
  • mset key value [key value …]
    批量添加键值对
  • get key
    根据key获取value
  • mget key [key …]
    根据多个key获取多个value
    在这里插入图片描述
  • incr
    让一个整型的key自增1,相当于java中的i++
  • incrby
    让一个整数按照指定的步长增长
  • incrbyfloat
    让一个浮点类型的数字按照指定步长增长
  • setnx
    设置键值对,如果该key存在则不执行。
    在这里插入图片描述
  • msetnx
    当key都不存在时,可以同时设置多个键值对,且该操作具有原子性,如果有一个设置失败,则都失败。
    在这里插入图片描述
  • setex
    添加一个String类型的键值对,并且指定有效期
  • getrange
    字符串截取,类似于java中的subString操作
    在这里插入图片描述
  • setrange
    在这里插入图片描述
  • getset
    在这里插入图片描述

(3)数据结构

String类型的数据结构为动态字符串,内不能的存储结构类型与java中的ArrayList采用预分配的方式来减少内存的频繁扩容。

2、列表(List)

(1)介绍

是一个字符串列表单键多值,它的底层是一个创建链表,对两端的操作性能很高,通过索引操作中间节点性能较差。

(2)常用命令

  • lpush/rpush
    从列表的左边/右边插入一个或多个值
  • rpoplplush key1 key2
    从key1列表右边获取一个值,并将该值从key1列表中移除,插入到key2列表左边。
  • lrange key start stop
    按照索引下标获取元素(从左到右)
  • lindex key index
    按照索引下标获取元素
  • lpop/rpop key
    从左边/右边获取一个值,并在队列中移除该值,没有值则返回nil
  • linsert key before value newvalue
    在value后面插入新值newvalue
  • lrem key n
    从左边删除n个
  • lset key index value
    将列表key下标为index的值替换为value
  • llen key
    获取列表的长度
  • BLPOP和BRPOP
    该命令会按照key的顺序查找list,直到找到第一个非空的list获取并移除该list最左边或最右边的第一个元素。此外还可以在指定的时间内获取列表中的元素,如果在指定的时间内没有元素则阻塞等待。
    在这里插入图片描述
    SpringBoot中代码应用:
 public List<String> pop(List<String> keys, int timeout) {
        return stringRedisTemplate.execute(connection -> {
            Assert.isTrue(connection instanceof DefaultStringRedisConnection, "Connection is not DefaultStringRedisConnection!");
            DefaultStringRedisConnection defConnection = (DefaultStringRedisConnection) connection;
            List<String> value = defConnection.bLPop(timeout, keys);
            log.info("bLPop blocked left pop, queues: {}, value: {}", keys, value);
            return value;
        }, true);
    }

(3)数据结构

List的数据结构为快速链表,当列表元素较少的情况下使用的是连续的存储空间进行存储被称为zipList(压缩链表),当元素较多的时候会转换成quickList = 链表+zipList
在这里插入图片描述

3、集合(Set)

(1)介绍

该类型与java中的hashSet结构类型,底层存储结构也是hash表,与HashSet有相同的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集和差集等操作

(2)常用命令

  • SADD key member …
    向key中添加一个或多个元素
  • SREM key member …
    移除key中指定的若干个元素
  • SCARD key
    返回key中的元素个数
  • SISMBMBER key member
    判断一个是否咋key中存在
  • SMEMBERS key
    获取key的所有元素
  • SINTER key1 key2 …
    求交集
  • SDIFF key1 key2 …
    求差集
  • SNUION key1 key2 …
    求并集

(3)数据结构

底层使用的是hash表结构

4、哈希(Hash)

5、有序集合(Zset)

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

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

相关文章

【Linux的权限命令详解】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 shell命令以及运行原理 Linux权限的概念 Linux权限管理 一、什么是权限&#xff1f; 二、权限的本质 三、Linux中的用户 四、linux中文件的权限 4.1、文件访问…

Minio文件分片上传实现

资源准备 MacM1Pro 安装Parallels19.1.0请参考 https://blog.csdn.net/qq_41594280/article/details/135420241 MacM1Pro Parallels安装CentOS7.9请参考 https://blog.csdn.net/qq_41594280/article/details/135420461 部署Minio和整合SpringBoot请参考 https://blog.csdn.net/…

BlueBunny:基于低功耗蓝牙的Bash bunny命令控制C2框架

关于BlueBunny BlueBunny是一款功能强大的命令控制框架&#xff0c;该工具基于低功耗蓝牙实现数据通信&#xff0c;可以帮助广大研究人员直接通过蓝牙将控制指令发送给Bash Bunny。 什么是Bash Bunny Bash Bunny是一款类似于USB Rubber Ducky的多功能USB攻击工具&#xff08;…

认识并使用LlamaIndex

认识并使用LlamaIndex 一、认识LlamaIndex1、是什么2、为什么要搞Llama Index&#xff1f;3、怎么搞Llama Index&#xff1f;3.1 方案1&#xff1a;用你的数据对LLM进行微调&#xff08;fine-tune&#xff09;3.2 方案2&#xff1a;[检索增强生成&#xff08;RAG&#xff09;](…

实验六 模式对象管理与安全管理

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

ChatGPT 到 Word:使用 Writage 进行复制粘贴魔法

ChatGPT 到 Word&#xff1a;使用 Writage 进行复制粘贴魔法 写在前面Writage的使用 写在前面 随着ChatGPT的日益普及&#xff0c;越来越多的人每天依赖它来完成各种任务。无论是寻找信息、语言翻译、解决数学问题&#xff0c;还是精炼复杂的概念和文本&#xff0c;ChatGPT 都…

Redis 存在线程安全问题吗?为什么?

一个工作了 5 年的粉丝私信我。 他说自己准备了半年时间&#xff0c;想如蚂蚁金服&#xff0c;结果第一面就挂了&#xff0c;非常难过。 问题是&#xff1a; “Redis 存在线程安全问题吗&#xff1f;” 一、问题解析 关于这个问题&#xff0c;我从两个方面来回答。 第一个&a…

高效调试!利用IDEA远程Debug服务器微服务Jar,快速定位和解决代码问题!

开两个端口端口8081、8085 解释8081 服务端口 8085 远程debug监听端口 服务启动jar命令&#xff1a; java -agentlib:jdwptransportdt_socket,servery,suspendn,address48081 -jar test-server.jar &或者nohup nohup java -agentlib:jdwptransportdt_socket,servery,susp…

c++函数重载(同名函数)功能,区别于c语言

c可以使用同名函数&#xff0c;实现功能类似的多个功能 规则&#xff1a; ①函数名相同&#xff0c;但是函数的参数&#xff08;形参&#xff09;绝不相同 ②参数个数不同 ③参数个数相同&#xff0c;参数类型不同 只有返回值类型不同&#xff0c;不可以&#xff1b;只有形…

初识计算机图形学

初识计算机图形学 笔记来源&#xff1a;【老奇】阴差阳错 撼动世界的游戏引擎 1.MVP Transformation 详见本人博客&#xff1a; 1.Transformation 2.梳理从MVP变换到光栅化的过程 MVP变换将空间中3D物体投影到2D屏幕 2.Rasterization 详见本人博客&#xff1a; 1.Rasteri…

索引的概述和性能分析

索引index&#xff0c;是一种有序的数据结构&#xff0c;可以高效的获取数据&#xff0c;在数据库中维护着满足查找特定算法的数据结构&#xff0c;就是索引 无索引的情况&#xff0c;查询数据时会全表扫描&#xff0c;效率极低 索引结构 &#xff08;1&#xff09;二叉树&…

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…

使用 crypto-js 进行 AES 加解密操作

在前端开发中&#xff0c;数据的加密和解密是为了保障用户隐私和数据的安全性而常见的任务。AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称密钥加密算法&#xff0c;被广泛用于保护敏感信息的传输和存储。本文将介绍 AES 加解密的基本原理&#xff0c;并…

区块链游戏概览:回顾 2023,展望 2024

作者&#xff1a;lesleyfootprint.network 数据来源&#xff1a;区块链游戏年报 关键要点 今年&#xff0c;比特币&#xff08;BTC&#xff09;市值从上年的低谷中强劲回升&#xff0c;相较之下&#xff0c;区块链游戏市场的增长虽然较为平淡&#xff0c;但年末也迎来了显著的…

【长文阅读】MAMBA作者博士论文<MODELING SEQUENCES WITH STRUCTURED STATE SPACES>-Chapter2

Gu A. Modeling Sequences with Structured State Spaces[D]. Stanford University, 2023. 本文是MAMBA作者的博士毕业论文&#xff0c;为了理清楚MAMBA专门花时间拜读这篇长达330页的博士论文&#xff0c;由于知识水平有限&#xff0c;只能尽自己所能概述记录&#xff0c;并适…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用&#xff0c;这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的&#xff0c;因此用户只需拥有一部手机&#xff0c;就可以在任何环境下与 ChatGPT 进行交流。例如&am…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

forEach如何跳出或中断循环

文章目录 概要使用try...catch抛出错误设置数组长度为0使用splice删除数组的元素 概要 在Javascript中&#xff0c;我们使用forEach遍历循环的时候&#xff0c;往往会面临跳出循环和中断循环&#xff0c;我们可以采取以下几种方式&#xff1a; 使用try…catch抛出错误 const …

IGBT工作原理

IGBT&#xff08;绝缘栅双极型晶体管) 在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体&#xff0c;IGBT具有 BJT 的输入特性和 MOS 管的输出特性。 与 BJT 或 MOS管相比&#xff0c;…

手把手教你学会接口自动化系列二十三-引入allure优化我们的代码结构生成报告

优化之后的代码如下&#xff1a; # !/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2024/01# Author : Laopiimport jsonimport loggingimport allurefrom testcase.conftest import *baseUrl GetYamlData(ConfigHandler.config_path).get_yaml_data()root_path os.p…