首页 > 数据库 >Redis的十大数据类型的常用命令(上)

Redis的十大数据类型的常用命令(上)

时间:2024-08-19 12:54:41浏览次数:14  
标签:set 数据类型 元素 Redis value 案例 key 常用命令 集合

目录

1.key的操作命令

redis是k-v键值对进行存储,这里的数据类型是value的数据类型,key的类型都是字符串
在这里插入图片描述
在这里插入图片描述

keys *        //当前库的所有key
exists        //判断某个key是否存在   1代表true 0代表false
type key      //查看你的key是什么类型
del key       //删除指定的key数据
unlink key    //非阻塞删除,仅仅将keys从keyspace元数据中删除,没真正的删除会在后续异步中操作
ttl key       //查看还有多少秒过期 -1表示永不过期 -2 表示已过期
expire key 秒    // 给key设置过期时间
move key dbindex [0-15]   // 将当前数据库的key移动到指定的数据库中  redis默认是有16个数据库的
select dbindex [0-15]   // 切换数据库[0-15],默认为0
dbsize   			// 查看当前数据库key的数量
flushdb         		// 清空当前库
flushall 			// 清空16个数据库 慎用

命令不区分大小写,而key的值是区分大小写的

help @+数据类型 会出现命令提示 比如 help @string

2.String的常用命令

  • String是redis最基本的类型,一个key对应一个value。

  • String类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。

  • String类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

image-20240816213719828
在这里插入图片描述

最常用

set key value ex 20   // 设置值 20秒过期
get key   // 获得对应的值

在这里插入图片描述
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重点 keepttl 仍沿用之前设置的时间

在这里插入图片描述

同时设置/获取多个键值

MSET [key1] [value1] [key2] [value2] [key3] [value3]  // 同时设置一个或多个键值对
MGET [key1] [key2] [key3]  // 同时获取多个key的值
MSETNX [key1] [value1] [key2] [value2]  // 同时设置一个或多个 key-value 对  必须保证key都不存在才能成功

获取指定区间

GETRANGE [key] 0 -1  // 获取这个key的值的全部
GETRANGE [key] 0 2   // 获取这个key的值索引0到索引2之间的值
SETRANGE [key] 1 xxx  // 设置指定区间范围内的值

在这里插入图片描述

数值增减

INCR [key]    // 递增数字 +1
INCRBY [key] [increment]   // 增加指定的整数  +increment 
DECR [key]   // 递减数字 -1
DECRBY [key] [increment]   // 减少指定的整数  -increment 

获取字符串长度和内容相加

STRLEN [key]        // 获取key对应的值的长度
APPEND [key] [vale]   // 添加字符串内容

在这里插入图片描述

分布式锁

当三个微服务去抢占一个资源时,syn/lock/unolck只保证在一个jvm中,只管自己,找一个折中的,在redis中有个节点key,setnx lock uuid,先在redis创建成功,就创建锁成功,就可以去抢夺这个资源,然后再del lock,释放锁,这个redis就相当于第三方机构

redis创建的是k-v 键值对

zookeeper创建的是node

setnx/setex [key] [过期时间] [value]  // 设置带过期时间的key,动态设置
setnx [key] [value] // 只有在 key 不存在时设置 key 的值。
// 一般是两个命令连用,写成lua脚本连用,具体在Redis高级分布式锁中使用

getset(先get再set)

getset [key] [value]  // 给定 key 的值设为 value ,并返回 key 的旧值(先返回旧值,再set)

应用场景

案例一:dy点赞

  • dy点赞某个视频或商品,点一次加一次
    • 使用incr key 获得多少人喜欢

案例二:文章的喜欢数

  • 对于文章是否喜欢
    • 使用incr key 获得多少人喜欢

3. List的常用命令

单key多vlue

结构:

  • Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边〉或者尾部〈右边)
  • 它的底层实际是个双端链表,最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

lpush [key] [value] ...  // 往 列表头部(左边)放入元素
Rpush [key] [value] ...  // 往 列表(右边)放入元素
lrange [key] 0 -1      // 从左边开始遍历列表  只能从左边遍历
lpop [key]           // 最左边的出栈 也就是lrange遍历的第一个
rpop [key]           // 最右边的出栈 也就是lrange遍历的最后一个
lindex [key] [index]  // 通过索引值获取值
llen [key]    // 获得元素个数
lrem [key] [num] [value]  // 从左往右删除 num个值为 value的值
lrem [key] 0 [value]  // 从左往右删除所有值为value的值
ltrim [key] [开始] [结束] // 截取指定范围的值后再赋给[key],也就是删除这个区间外的值

RPOPLPUSH [key1] [key2]  //移除列表的最后一个元素,并将该元素添加到另一个列表的第一个并返回

lset [key] [index] [value]   //将key的第 index 个索引值改为value
linsert [key] before/after [value1] [value2] // 在list某个已有值的前后再添加具体值

应用场景

案例:公众号订阅的消息

  • 公众号的订阅的消息
    • 关注的人发布文章,就会到我的List lpush likearticle:id 文章id
    • 查看自己订阅的文章 lrange likearticle:id 0 9

4. Hash的常用命令

k-v 模式不变,但v是一个键值对 => Map

结构:

  • Redis hash是一个string类型的 field(字段)和value(值)的映射表,hash特别适合用于存储对象
  • Redis 中每个hash可以存储2个32-1键值对(40多亿)

在这里插入图片描述

hset/hget/hmset/hmget/hgetall/hdel

在这里插入图片描述

hlen   // 获取在某个key内的全部数量
hexists [key] [k1]   // 看key中是否有k1这个键
hkeys [key]    // 获取key里面的所有key
hvals [key]    // 获取key里面的所有value
hincrby [key] k1 [num] // key里面k1的值增长num 整数
hincrbyfloat [key] k1 [num] // key里面k1的值增长num 小数
hsetnx [key] k1 [value] // 不存在赋值,存在了无效\

应用场景

案例:早期购物车设计

  • 早期购物车设计,基本不用了,中小厂可用

新增商品:hest shopcar:uid1024(用户id) 334488(商品id) 1(商品数量)

新增商品:hest shopcar:uid1024(用户id) 334477(商品id) 1(商品数量)

增加商品数量:hincrby shopcar:uid1024(用户id) 334477 1

商品总数:hlen shopcar:uid1024

全选:hgetall shopcar:uid1024

5. Set的常用命令

单值多value,无重复

结构:

  • Redis 的 Set 是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者hashtable

  • Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

  • 集合中最大的成员数为2^32 - 1(4294967295,每个集合可存储40多亿个成员)

在这里插入图片描述
在这里插入图片描述

常用的

SADD key member ...   // 添加元素
SMEMBERS key      // 遍历集合中所有元素
SISMEMBER key member    // 判断元素是否在集合中
SREM key member ...     // 删除元素
SCARD  key          // 获取集合长度
SRANDMEMBER key m   // 从set集合里面随机取出m个    如果超过最大数量就全部取出   如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值    不会删除
SPOP key m   // 从集合中随即弹出一个元素  出一个删一个
SMOVE key1 key2 在key1里已存在的某个值  // 将key1的已存在的某个值赋给key2

集合运算

SDIFF keyA keyB     // A - B  属于A但不属于B的元素构成的集合
SUNION keyA keyB    // A U B  属于A或者属于B的元素合并后的
SINTER keyA keyB    // A ∩ B  属于A同时属于B
SINTERCARD numkeys keyA keyB [LIMIT limit] // 不返回结果集,只返回结果的基数
基数:去重统计数,例如一共五个数字,重复的有俩,去掉重复的,还有三个,3就是基数

SDIFF key1 key2

在这里插入图片描述

SUNION key1 key2

在这里插入图片描述

SINTER keyA keyB

在这里插入图片描述

SINTERCARD numkeys keyA keyB [LIMIT limit]

在这里插入图片描述

应用场景:(三个案例)

案例一:抽奖小程序

  • 抽奖小程序
    • 将所有抽奖用户 sadd key 用户ID
    • 显示多少人参加 SCARD key
    • 从set中任意选取N个中奖人
      • SRANDMEMBER key 2 随机抽奖两个人,元素不删除
      • SPOP key 2 随机抽奖两个人,元素会删除

在这里插入图片描述

案例二:朋友圈点赞

  • 朋友圈点赞
    • 新增点赞 SADD pub:msgID 点赞用户Id1 点赞用户Id2
    • 取消点赞 SREM pub:msgID 点赞用户Id
    • 展现所有点赞过的用户 SMEMBERS pub:msgID
    • 点赞用户统计 SCARD pub:msgID
    • 判断某个朋友是否对楼主点赞过 SISMEMBER pub:msgID 用户Id
    • 在这里插入图片描述

案例三:朋友圈点赞

  • 可能认识的人

    • 求两个人的差集 SDIFF user1 user2

    在这里插入图片描述

6. Zset的常用集合(sorted set)

注意:Zset和set的区别,就是在set的基础上加了一个score分数值。

  • set k1 v1 v2 v3
  • Zset k1 score1 v1 score2 v2

常用的:

在这里插入图片描述在这里插入图片描述

ZADD key score member [ score member ] // 添加元素
ZRANGE key start stop [WITHSCORES] // 返回元素分数从小到大的顺序   返回索引从start到stop之间的所有元素
ZREVRANGE key 0 - 1 [WITHSCORES]   // 反序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] // 获取指定分数范围的元素  (min,max) 不包含   limit是返回限制,返回多少个 
ZSCORE key member     // 获取元素的分数
ZCARD key             // 获取集合中元素的数量
ZREM key 某score下对应的value值   // 删除元素
ZINCRBY key increment member    // 增加某个元素的分数
ZCOUNT key min max     // 获得指定分数范围内的元素个数
ZRANK key values值     // 获得下标值
ZREVRANK key values    // 逆序获得下标值
ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] //弹出元素 会删除  numkeys 表示几个key <MIN | MAX> 小 | 大  [COUNT count] count num 弹出num个

重点是ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count]

在这里插入图片描述

应用场景:

案例一:根据商品销售对商品进行排序显示

  • 根据商品销售对商品进行排序显示
    • 思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
    • 商品编号1001的销量是9,商品编号1002的销量是15
      • zadd goods:sellsort 9 1001 15 1002
    • 有一个客户又买了2件商品1001,商品编号1001销量加2
      • zincrby goods:sellsort 2 1001
    • 求商品销量前10名
      • ZRANGE goods:sellsort 0 9 withscores

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签:set,数据类型,元素,Redis,value,案例,key,常用命令,集合
From: https://blog.csdn.net/qq_55846232/article/details/141322518

相关文章

  • redis 哨兵模式开启方案
    哨兵模式一、配置sentinel模式二、测试sentinel日志输出的状态信息环境准备准备三台系统为CentOS7的主机master:192.168.152.71slave1:192.168.152.72slave2:192.168.152.73.哨兵模式的介绍:Redis哨兵模式(RedisSentinel)用于提供高可用性和监控功能,主要......
  • TypeScript学习之旅--对象数据类型
    1、对象类型声明1leta:{name:string,age:number};2a={name:"John",age:30};如果想设定多个参数且不确定参数类型,可用any,类似于参数列表,不限制参数个数和类型1leta:{name:string,age:number,[pro:string]:any};2a={name:"John",age:30,pro1:100,pro2:"Hello"};......
  • TypeScript学习之旅--数据类型
    TypeScript为JavaScript的超集(ECMAScript6),这个语言添加了基于类的面向对象编程。TypeScript作为JavaScript很大的一个语法糖,本质上是类似于css的less、sass,都是为了易于维护、开发,最后还是编译成JavaScript。Types所有类型都是any类型的子类型,其他类型被分成元类型(pri......
  • cmake 常用命令记录
    cmake常用命令记录命令cmake_minimum_requiredprojectadd_executablesetconfigure_filetarget_**optionmessageadd_libraryadd_subdirectoryadd_definitionsinstallcpackmacrostringfileDEFINEDlistfind_packagectest构建类型扩展gtest命令cmake_minimum_required......
  • 【OpenCV教程】OpenCV中的数据类型
    @目录1.CV_8U2.CV_8S3.CV_16U4.CV_16S5.CV_16F6.CV_32S7.CV_32F8.CV_64F9.一图流1.CV_8UCV_8U:占8位的unsignedCV_8UC(n):占8位的unsignedcharCV_8UC1:占8位的unsignedchar一通道CV_8UC2:占8位的unsignedchar二通道CV_8UC3:占8位的unsignedchar三通道CV_8UC4:占8位......
  • 速通Redis
    redis问题总结缓存问题:1.缓存穿透查询一个不存在的数据,MySQL中也查询不到而且也写不进缓存,就导致每次请求都查询数据库解决方案缓存空数据,查询返回数据为空时把空结果缓存:缺点是内存开销变大布隆过滤器:通过哈希检测一个元素是否存在于集合中:在缓存预热时同时预热过滤器,将......
  • vi 常用命令
    原文: https://www.cnblogs.com/qianxudetianxia/archive/2012/07/07/2578361.html1.移动指令  (1).hjkl,方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了。  (2).b,before,上一个单词(词首)      w,w......
  • 基于SpringBoot3框架-数据库乐观锁、悲观锁、Redis、Zookeeper分布式锁的简单案例实现
    1.分布式锁的定义分布式锁是一种在分布式系统中用来协调多个进程或线程对共享资源进行访问的机制。它确保在分布式环境下,多个节点(如不同的服务器或进程)不会同时访问同一个共享资源,从而避免数据不一致、资源竞争等问题。2.分布式锁的工作原理分布式锁的工作原理与单机锁......
  • Java面试题———Redis篇①
    目录1、项目中为什么用Redis2、Redis的数据类型有哪些3、Redis为什么这么快4、Redis的过期删除策略有哪些5、Redis的内存淘汰策略有哪些6、Redis的RDB和AOF区别7、RDB期间可以同时处理写请求吗8、Redis集群有哪些方案1、项目中为什么用Redis我们项目中之所以选择R......
  • 023、Vue3+TypeScript基础,使用defineProps限制父传子的数据类型,并用v-for显示
    01、index.js代码如下://定义一个接口,用于限制person对象的具体属性exportinterfacePersonInter{id:string;name:string;age:number;}exporttypePersons=Array<PersonInter>;02、App.vue代码如下:<template><divclass="app">&......