【Redis】五大基本数据类型操作大全

2023-09-16 23:35:45

作者简介

目录

1.概述

2.String

3.List

4.Set

5.Hash

6.zSet


1.概述

redis中一共提供了五种数据结构:

  1. String
  2. List
  3. Set
  4. Hash
  5. zSet

很多时候无法记全这五种数据结构,这里教大家一种办法,这样来记忆即可:

1.Redis是一个KV形式的内存数据库,所以其数据组织方式其实就是以KV为基准然后进行扩展,由KV的一对一到List的一对多再到Map的一类KV的集合。

2.实际业务场景中,Redis中存的数据很可能具有唯一性(比如用户信息)或者顺序性(比如需要根据用户VIP等级来顺序拿用户),所以”辨重“、”排序“,是两个很关键的能力。

首先redis基于基础一对一的kv进行扩展,提供了三种基础结构:

  • String
  • List
  • Hash

redis本质上是个KV形式的内存数据库,所以KV形式是它的基础形式,也就是String类型的数据结构。

除了一个Key对应一个Value外,业务上有时候还需要一个key对应多个value,也就是链表类型,也就是Redis中的List类型的数据结构。

业务上有时候需要将一类KV键值对聚集在一起做成一个集合,就像JAVA中的Map一样,一类KV键值对的集合,也就是Hash类型的数据结构。

接下来为了业务使用上的友好,又提供了两种结构:

  • Set
  • zSet

List中的数据可能重复,所以给出了不能重复的一个key对应多个value的结构——Set。

为了方便按照权重字段进行排序,专门给出了一种用来排序的结构——zSet。

2.String

设置/获取单个key

设置/获取多个key

如果value是数值形式的,String支持对数值进行操作:

自增

incr age

自减

decr age

增加指定值

incrby age 5

减少指定值

decrby age 5

批量操作

mset gender 男 height 170

mget gender height

追加

append name 追加内容

如果内存中没有key,会自动创建一个新的KV对放入内存。

截取

获取值的范围,类似于java String中的substring

getrange <key><起始位置><结束位置>

3.List

一个key对应多个value,value可以重复。

压入/弹出

可以头压,尾压。头弹,尾弹。

在压的时候就会根据参数,自动建List。

查看

lrange 名称 起始位 结束位

0 -1 表示查看所有。

llen <key> 获取长度

删除

删除元素:

ltrim 名称 个数(正数从左往右删、负数从右往左删,0删除所有) value

删除List:

在List弹出所有元素以后,其实就会自动删除数据结构。

也可以通过命令来手动删除:

del 名称

4.Set

一个key对应多个value,value不可以重复。

添加元素sadd
获取所有元素smembers
判断是否是集合的成员sismember
随机取出一个元素srandmember

5.Hash

插入单个kvhset <XXX>  <key>  <value>
取出单个kvhget <XXX>  <key> 
插入多个kvhmset <XXX>  <key1>  <value>:<key2>  <value>
查看某个key是否存在hexists <XXX>  <key>
查看所有keyhkeys <XXX>
查看所有valuehvals<XXX>

放单个值的时候不需要”” 放多个值的时候需要””

支持批量放入、批量查看

6.zSet

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分 (score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。因为元素是有序的,所以你也可以很快的根据评分(score) 或者次序 (position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

相同分数,相同元素无法插入,

相同分数,不同元素可以插入

不同分数,相同元素,分数会被替换。

查询所有:zrank dbs 0 -1

更多推荐

数据结构----链式栈

目录前言链式栈操作方式1.存储结构2.初始化3.创建节点4.判断是否满栈5.判断是否空栈6.入栈7.出栈8.获取栈顶元素9.遍历栈10.清空栈完整代码前言前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)_灰勒塔德的博客-CSDN博客)那么今天我们就开始学习新

初识Java 9-1 内部类

目录创建内部类到外部类的链接使用.this和.new内部类和向上转型在方法和作用域中的内部类匿名内部类嵌套类接口中的类从多嵌套的内部类中访问外部人员本笔记参考自:《OnJava中文版》定义在另一个类中的类称为内部类。利用内部类,将逻辑上存在关联的类组织在一起,并且可以控制一个类在另一个类中的可见性。创建内部类创建内部类

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理工程项目各模块及其功能点清单一、系统管理1、数据字典:实现对数据字典标签的增删改查操作2、编码管理:实现对系统编码的增删改查操作3、用户管理:管理和查看用户角

2023/9/14 -- C++/QT

作业:仿照Vector实现MyVector,最主要实现二倍扩容#include<iostream>usingnamespacestd;template<typenameT>classMyVector{private:T*data;size_tsize;size_tV_capacity;public://无参构造MyVe

想了解RPA看这篇就够了(全面又清晰)

想了解RPA看这篇就够了(全面又清晰)本文目录如下:(1)什么是RPA(2)RPA技术发展路线(3)RPA应用场景(4)RPA对比人工的优势(5)RPA的核心能力(1)什么是RPARPA(RoboticProcessAutomation,机器人流程自动化)是一种通过软件机器人模拟和执行规则化、重复性的任务来提高工作效率

大模型重构行业,百度网盘再度抢跑?

随着ChatGPT爆火出圈,AI大模型逐渐渗透到各个行业和领域,诸多大厂也纷纷发布了自己的大模型产品。而在国内AI大模型的市场上,百度的文心大模型无疑是其中较为有名的一个。于是,在国内大厂都在探索如何在大模型时代取得更多优势时,百度大模型也不再局限于某个特定领域,而是将目光放在了网盘应用上。自百度网盘经历“百盘大战”进

Vue3中watch用法

在Vue3中的组合式API中,watch的作用和Vue2中的watch作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。当需要在数据变化时执行异步或开销较大的操作时,computed是无法操作异步数据的,所以需要使用watch进行侦听。侦听器watch作用是侦听一个或多个

斗地主案例及一些实现规则

4.斗地主发牌4.1案例介绍按照斗地主的规则,完成洗牌发牌的动作。具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。4.2案例分析准备牌:牌可以设计为一个ArrayList<String>,每个字符串为一张牌。每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭

Visual Studio复制、拷贝C++项目与第三方库配置信息到新的项目中

本文介绍在VisualStudio软件中,复制一个已有的、配置过多种第三方库的C++项目,将其拷贝为一个新的项目,同时使得新项目可以直接使用原有项目中配置好的各类**C++**配置、第三方库等的方法。在撰写C++代码时,如果需要用到他人撰写的第三方库,那么每次新建一个项目时都需要重新配置一次环境,相对比较麻烦;而如果我

c语言每日一练(15)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。五道选择题:1、程序运行的结果为()#include<stdio.h>intmain(){intpad=0;intpAd=0;intsum=5;pad=5;pAd=

SpringMVC之JSR303和拦截器

一.什么是JSR303二.JSR303常用注解作用使用导入pom.xml在实体类相对应的属性中增加注解用来指定校验在hpjyController里面新加以下代码修改eidt.jsp测试结果​编辑二.拦截器什么是拦截器拦截器与过滤器的区别应用场景日志记录:拦截器可以用于记录请求的相关信息,如请求的URL、请求参数、请求的

热文推荐