Redis: Redis介绍

文章目录

  • 一、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.mzph.cn/news/635078.shtml

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

相关文章

python实操之网络爬虫介绍

一、什么是网络爬虫 网络爬虫&#xff0c;也可以叫做网络数据采集更容易理解。它是指通过编程向网络服务器&#xff08;web&#xff09;请求数据&#xff08;HTML表单&#xff09;&#xff0c;然后解析HTML&#xff0c;提取出自己想要的数据。 它包括了根据url获取HTML数据、解…

R.swift SwiftGen 资源使用指南

R.swift 和 SwiftGen 资源转换使用指南 R.swift &#xff08;原始代码会打包到项目&#xff1f;&#xff09; Pod platform :ios, 12.0 target LBtest do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!pod R.swift # pod SwiftGen, ~&g…

(二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真

一、创建工作空间 mkdir catkin_ws cd catkin_ws mkdir src cd src 二、下载wpr_simulation源码 git clone https://github.com/6-robot/wpr_simulation.git 三、编译 ~/catkin_make 目录下catkin_makesource devel/setup.bash 四、运行 roslaunch wpr_simulation wpb_s…

java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)

一、效果 二、代码 2.1 Acount类 package com.demo1;public class Acount {public static void main(String[] args) {String details "收支\t账户金额\t收支金额\t说 明\n"; //通过字符串来记录收入明细int balance 10000;boolean loopFlag true;//控制循…

2023.1.19 关于 Redis 事务详解

目录 Redis 事务对比 MySQL 事务 MySQL 事务 Redis 事务 Redis 事务原子性解释 Redis 事务详解 执行流程 典型使用场景 Redis 事务命令 WATCH 的使用 WATCH 实现原理 总结 阅读下文之前建议点击下方链接了解 MySQL 事务详解 MySQL 事务详解 Redis 事务对比 MySQL 事…

[陇剑杯 2021]jwt

[陇剑杯 2021]jwt 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;昨天&#xff0c;单位流量系统捕获了黑客攻击流量&#xff0c;请您分析流量后进行回答&#xff1a; 该网站使用了______认证方式。&#xff08;如有字母请全部使用小写&#xff09…

C++ 设计模式之备忘录模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 -- 什么是备忘录模式 &#xff08;第17种模式&#xff09; 备忘录模式&#xff08;Meme…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API&#xff0c;所以需要包含头文件…

UI组件在线预览,程序员直呼“不要太方便~”

一、介绍 以往大家如果想查看组件的使用效果&#xff0c;需要打开DevEco Studio构建工程。现在为了便于大家高效开发&#xff0c;文档上线了JS UI组件在线预览功能&#xff0c;无需本地构建工程&#xff0c;在线即可修改组件样式等参数、一键预览编译效果。程序员直呼&#xff…

可视化k8s页面(Kubepi)

Kubepi是一个简单高效的k8s集群图形化管理工具&#xff0c;方便日常管理K8S集群&#xff0c;高效快速的查询日志定位问题的工具 随便在哪个节点部署&#xff0c;我这里在主节点部署 docker pull kubeoperator/kubepi-server docker run --privileged -itd --restartunless-st…

RabbitMQ-生产者可靠性

一、生产者重连 1、概念 由于网络波动导致客户端无法连接上MQ&#xff0c;这是可以开启MQ的失败后重连机制。 注意&#xff1a; 是连接失败的重试&#xff0c;而不是消息发送失败后的重试。 2、开启配置 spring:rabbitmq:template:retry:enabled: true # 是否启用重试机制ma…

【RabbitMQ】RabbitMQ安装与使用详解以及Spring集成

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《RabbitMQ实战》。&#x1f3af;&#x1f3af; &am…

java实现红黑树

红黑树 红黑树是一种自平衡二叉查找树&#xff0c;其中每个节点都有一个颜色属性&#xff0c;颜色为红色或黑色。它的特性保证了树在插入和删除操作后仍然保持大致的平衡&#xff0c;使得查找操作能够在对数时间内完成。以下是红黑树的一些基本性质&#xff1a; 每个节点是红…

面试题16.15.珠玑妙算

前言 这两天突然发现力扣上还是有我能写出来的题的&#xff0c;虽说都是简单级别的&#xff08;以及一道中等的题&#xff09;&#xff0c;但是能写出来力扣真的太开心了&#xff0c;&#xff08;大佬把我这段话当个玩笑就行了&#xff09;&#xff0c;于是乎&#xff0c;我觉…

C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(20)——列表&#xff08;List&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124094382 编写软件&#xff08;大软件称为系统&#xff09;与盖大楼一个道理。 假设咱们现在需要盖一座名为“天梯大厦”的…

kubernetes工作负载-DamonSet

一、DemonSet的介绍 1、什么是DemonSet DaemonSet 控制器是用来保证在所有节点上运行一个 Pod 的副本当有节点加入集群时&#xff0c; 也会为他们新增一个 Pod。 当有节点从集群移除时&#xff0c;这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 简而言之…

进入docker容器,vi: command not found

问题描述&#xff1a; 进入docker容器&#xff0c;查看文件执行vim 命令&#xff0c;报错 vim: command not found。搜索解决方案&#xff0c;说执行一下 apt-get install vim命令&#xff0c;然后又报错 Unable to locate package vim。 解决&#xff1a; 1.执行 npt-get up…

YOLOv3:算法与论文详细解读

【yolov1&#xff1a;背景介绍与算法精讲】 【yolo9000&#xff1a;Better, Faster, Stronger的目标检测网络】 目录 一、YOLOv3概述二、创新与改进三、改进细节3.1 多尺度特征3.2 不同尺度先验框3.3 完整的网络结构3.3 Darknet-53主干网络3.4 残差网络3.4.1 恒等映射3.4.2 网络…

git提交代码到远端仓库的方法详解

一、何为git git就是版本控制器&#xff0c;就比如说你新建了一个git文件夹&#xff0c;里面用于存放你的C语言实习报告&#xff0c;现在要用git对该文件夹进行接管。当你修改了你的C语言实习报告点击保存之后&#xff0c;就用git的相关命令&#xff0c;提交给git&#xff0c;让…

go语言(十)---- 面向对象封装

面向对象的封装 package mainimport "fmt"type Hero struct {Name stringAd intLevel int }func (this Hero) Show(){fmt.Println("Name ", this.Name)fmt.Println("Ad ", this.Ad)fmt.Println("Level ", this.Level)}func (thi…