【redis基础】redis的十大数据类型

news2024/11/24 19:28:54

前言

接受虚竹哥的建议,后续将发布redis的系列文章

本篇文章针对有关Redis7数据类型的的使用率较高的操作进行讲解,有关Redis7中数据类型的全部操作请查阅:Commands | Redis

上一篇文章:初识redis【redis的安装使用与卸载】_努力努力再努力mlx的博客-CSDN博客

大家有问题随时私信我即可~


目录​​​​​​​

redis键(key)

redis字符串(String)

Redis列表(List)

Redis哈希(Hash)

Redis集合(Set)

Redis有序集合Zset(sorted set)

Redis位图(bitmap)

Redis基数统计(HyperLogLog)

Redis地理空间(GEO)

Redis流(Stream)

Redis位域(bitfield)


redis键(key)

常用的redis指令一览:

关于对key常用指令的详细介绍如下:
 keys *  #查看当前k=库中的所有key

exists key      #判断某个key是否存在(在redis的指令中,0代表查询出0条指令(找不到符合条件的指令),1代表查询成功)


type key       #查看当前key的数据类型


del key          #删除指定的key


unlink key      #非阻塞删除,仅仅将keys从keyspace元数据中删除,没真正的删除会在后续异步中操作,在当前我们只需要对这个指令有一定的印象,后续我们会对其进行进一步的介绍


ttl key            #查看我们查询的key还有多少秒过期 -1表示永不过期 -2 表示已过期


expire key 秒      #给key设置过期时间


move key [0-15]  #将当前数据库的key移动到指定的数据库中,redis默认是有16个数据库
select [0-15]       #切换数据库[0-15],默认为0,下标超出0-15的范围会报错


dbsize                # 查看当前数据库key的数量


flushdb               #清空当前库,慎用


flushall               #清空16个数据库 慎用

这个操作考虑到很危险,在这里就先不演示了 

help @ 类型 查看某个类型的帮助文档

notes:我们进行操作的指令并不区分大小写,但是我们自己手动设置的键是区分大小写的

redis字符串(String)

string 是redis中最基本的数据类型,一个key对应着一个value,string数据是二进制安全的,也就是说它可以存储任何数据,包括jpg文件和

String中的常用指令:

 关于对String类型指令的详细介绍如下:
set key value

 

 get key # 获取指定key对应的value值

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 3# 获取这个key的值索引0到索引2之间的值
getrange [key] 1 xxx  #设置指定区间范围内的值


 
数值增减
incr [key]    # 递增数字 +1
incr [key] [increment]   # 增加指定的整数  +increment 
decr [key]   # 递减数字 -1
decr [key] [increment]  #减少指定的整数  -increment 


获取字符串长度和内容相加
strlen [key]        #获取key对应的值的长度


append [key] [vale]   #添加字符串内容
 

分布式锁
setex [key] [过期时间] [value]  # 设置带过期时间的key,动态设置


setnx [key] [value] # 只有在 key 不存在时设置 key 的值。


set [key] [value] get # 给定 key 的值设为 value ,并返回 key 的旧值


getset [key] [value]  # 给定 key 的值设为 value ,并返回 key 的旧值

 

应用场景:
1.抖音点赞

2.文章喜欢点赞

Redis列表(List)

对list的介绍

一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。list对应的是单key多value

left、right都可以插入添加;

如果键不存在,创建新的链表;

如果键已存在,新增内容;

如果值全移除,对应的键也就消失了。

  • 它list的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
  • li;list的常用操作

对list操作的常用介绍 

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] [value] //移除列表的最后一个元素,并将该元素添加到另一个列表的第一个并返回


lset [key] [index] [value]   //将key的第 index 个索引值改为value


linsert [key] brfore/after [value1] [value2] // 在list某个已有值的前后再添加具体值

应用场景
 微信公众号给我推我订阅作者的文章

当我订阅的作者发布了两篇新文章,对应的id分别是11 和 22

lpush likearticle:ljl 11 22

我想要查看前十条订阅文章信息:

lrange likearticle:ljl 0 9

Redis哈希(Hash)

简要介绍

当我们讲到哈希时,我们第一反应肯定是java中的hashmap。redis中的哈希与java中的哈希类似,k-v 模式不变,但v是一个键值对 => Map<String,Map<Object,Object>

常用指令一览

常用指令详细介绍

hset/hget/hmset/hmget/hgetall/hdel //hset/get对应的是获取值和得到值 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] // 不存在赋值,存在了无效

hash的典型的应用场景:

购物车早期的应用

Redis集合(Set)

简要介绍

 当我们想到set时,我们最先想到的是java中的hashset,在redis中的set集合,set中的值必须不重复,他存放数据的方式是单值多value

常用指令

常用指令的详细介绍 

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] // 同样是求交集,不返回结果集,只返回结果的基数 limit用于限制交集的基数,如果在运算过程中结果超过了limit的限制数,直接返回

典型应用场景

1.vx抽奖

2.vx朋友圈设置同赞的朋友

3.qq中推可能认识的人

Redis有序集合Zset(sorted set)

对zset的介绍

zset是在set的基础上加了score这样一个字段,正是因为这个字段,zset可以在满足set特点的基础上对元素进行排序

常用的关于zset的指令

zset常用指令的详细介绍

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     // 获得指定分数范围内的元素个数


ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] // 从键名列表中的第一个非空排序集中弹出一个或多个亓素,它们是成员分数对


ZRANK key values值     // 获得下标值


ZREVRANK key values    // 逆序获得下标值   

 

应用场景:
根据商品的销售量对商品进行排序

  

Redis位图(bitmap)

位图的概念

说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型

位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)

常用命令一览

常用命令详细介绍

SETBIT key offset value    // 将第offset的值设为value  value只能是0或1  offset 从0开始


GETBIT key offset        // 获得第offset位的值


STRLEN key              // 得出占多少字节 超过8位后自己按照8位一组一byte再扩容


BITCOUNT key         // 得出该key里面含有几个1


BITOP and destKey key1 key2 // 对一个或多个 key 求逻辑并,并将结果保存到 destkey 


以下操作同理,在这里不进行赘述~ 

BITOP or destKey key1 key2 // 对一个或多个 key 求逻辑或,并将结果保存到 destkey 

BITOP XOR destKey key1 key2 // 对一个或多个 key 求逻辑异或,并将结果保存到 destkey 
BITOP NOT destKey key1 key2 // 对一个或多个 key 求逻辑非,并将结果保存到 destkey

 典型应用场景:
签到的应用场景很适合用位图

一年365天,天天签到的占多少天

按照年

Redis基数统计(HyperLogLog)

  基本介绍

去重复统计功能的基数估计算法就是 HyperLogLog,基数是一种数据集,去重复后的真实个数。基数统计用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算只需要花费内存,就能记录 2的64次方=18446744073709551616 个不同元素的基数。但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。

常用指令

 pfadd hyl1    1  1 1 1 2  3 6
pfadd hyl2       2 4 4 4 6 7 8 9
pfcount hyl2       //计算hyl2中去重后元素个数
pfmerge distResult hyl2       hyl1       //合并hyl2和 hyl1中元素并去重
pfcount disResult    //计算hyl2中去重后元素个数

应用场景

天猫网站首页亿级UV的redis统计方案

Redis地理空间(GEO)

简要介绍

地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。

例如滴滴打车,最直观的操作就是实时记录更新各个车的位置
然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
经纬度去地图上直接复制:
拾取坐标系统

常用指令

 常用指定详细介绍 

GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" //GEOADD添加经纬度坐标


ZRANGE city 0 -1 // 查看(会出现中文乱码)


redis -cli -a 111111 -p 6379 -- raw // 解决中文乱码


GEOPOS city 天安门 故宫 // GEOPOS 返回经纬度
//GEOHASH返回坐标的 geohash 表示 (base32编码)


GEOHASH city 天安门 故宫


//GEODIST 返回两个位置之间的距离(m km )
GEODIST city 天安门 长城 km
//GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS city 116.418017 39.9144444 10 km withdist withcoord count 10 desc
//GEORADIUSBYMEMBER 找出指定范围内的元素,中心点是由给定的位置元素决定
GEORADIUsbymember city 天安门 10 km withdist withcoord count 10 withhash

应用场景

  • 美团附近的饭店、酒店
  • 高德地图附近的店

Redis流(Stream)

流的内容我单独整理为一篇博客啦~

redis【stream】:对redis流数据类型的详细介绍_努力努力再努力mlx的博客-CSDN博客

Redis位域(bitfield)

基本介绍

用途:一句话说,将一个Redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改

两个功能具体如下:

  • 位域修改
  • 溢出控制

 基本语法

 

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

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

相关文章

Java --- 云尚办公之Activiti7

目录 一、工作流 1.1、什么是工作流 1.2、工作流引擎 1.3、常见工作流引擎 二、 Activiti7概述 2.1、Activiti介绍 2.2、建模语言BPMN 2.3、 Activiti使用流程 三、 Activiti使用 3.1、部署流程工具 3.2、画出流程图并放入项目中 3.3、流程定义部署 3.4、启动流程…

要闻 | 自然资源部实景三维建设与城市精细化治理工程技术创新中心揭牌仪式暨第二季度工作推进会顺利召开

2023年5月16日上午&#xff0c;全国首个实景三维领域部级工程技术创新中心——自然资源部实景三维建设与城市精细化治理工程技术创新中心&#xff08;以下称“中心”&#xff09;在武汉大势智慧科技有限公司举行了揭牌仪式&#xff0c;并在大势会议室顺利召开了中心第二季度工作…

19-02 基于业务量级的架构技术选型演进

从零开始——单服务应用 单体应用技术选型 &#xff08;GitHub、Gitee…&#xff09;搜索是否有线程的产品用最熟悉的技术&#xff0c;最快的速度上线如果有经费&#xff1a;考虑商业化解决方案 个人小程序怎么做技术选型的 搜索是否有快速搭建下程序的软件技术选型 后端技…

PX4从放弃到精通(二十五):EKF2

文章目录 前言一、主程序二、update()二、predictState()三、controlFusionModes()四、controlGpsFusion五、fuseGpsVelPos()六、fuseHorizontalVelocity()七、fuseVelPosHeight()八、calculateOutputStates()前言 PX4 1.13.2 PX4 ekf的传感器数据放在FIFO的环形缓冲区中,每…

智能综合交通(水运、航空)主题汇总(附下载链接)

根据我国现行的交通运输体制&#xff0c;公路以外的交通运输称为综合交通运输形式&#xff0c;包括铁路、航空和水运等。本部分包括航空和水运运输&#xff08;铁路部分另外单独列出&#xff09;。 智慧水运、航道、港口 &#xff08;至2023年05月23日&#xff09; 湛江市综合交…

容器编排器们的自我介绍

哈喽大家好&#xff0c;我是咸鱼 咸鱼在《一文带你了解容器技术的前世今生》有介绍过容器技术的由来以及Docker项目的发展 我们知道&#xff0c;Docker 及其他容器技术能够极大地简化应用程序的部署&#xff0c;做到了”开箱即用“ 俗话说&#xff1a;”凡是具有两面性“。容…

OSPF 5种报文、状态机、邻居建立的过程

OSPF 5种报文、状态机、邻居建立的过程 一、OSPF的5种报文二、OSPF状态机三、OSPF建立的过程 一、OSPF的5种报文 Hello 用于发现邻居&#xff0c;维持邻居的状态 DD DD报文有确定设备主从&#xff0c;同步DD序列号 包含着LSA的头部信息&#xff0c;有同步LSDB数据库的作用 LSA…

云原生|Kubernetes Operator测试实例

目录 一、主要代码介绍 &#xff08;一&#xff09;变量定义&#xff1a; &#xff08;二&#xff09;测试程序入口 &#xff08;三&#xff09;before函数 &#xff08;四&#xff09;after函数 二、实际测试 &#xff08;一&#xff09;块划分 &#xff08;二&#x…

【数据分享】1997-2017 年中国市县级能耗与能效数据集

能源既关乎国家经济命脉&#xff0c;又影响人民生活水平&#xff01;能源相关的研究是各个行业的热门研究话题&#xff0c;能源相关的数据也是经常使用的数据&#xff01; 我们发现在figshare平台上分享有1997-2017 年我国市县级的能耗与能效数据&#xff0c;数据格式为Excel&…

CMake常用命令总结与练习

CMake常用命令总结 前言cmake_minimum_required (VERSION XX):CMake最低版本project (demo)&#xff1a;CMake工程名add_executable(main main.c):生成可执行文件aux_source_directory(dir var)&#xff1a;指定源文件放入变量set(val src):指定源文件放入变量include_director…

js闭包的简单应用

闭包的概念&#xff1a;有权访问其他函数的内部变量的函数 闭包是作用域运用的特殊场景。 注&#xff1a;js中自由变量的查找是在函数定义的地方向上级作用域查找&#xff0c;不是在执行的地方。 闭包的使用场景概况为两种&#xff0c;一种是函数作为参数被传递&#xff0c;一种…

面试官:MySQL自增主键一定是连续的吗?

测试环境&#xff1a; MySQL版本&#xff1a;8.0 数据库表&#xff1a;T &#xff08;主键id&#xff0c;唯一索引c&#xff0c;普通字段d&#xff09; 如果你的业务设计依赖于自增主键的连续性&#xff0c;这个设计假设自增主键是连续的。但实际上&#xff0c;这样的假设是错的…

还在用System.out+System.currentTimeMillis打印耗时?Arthas是你不可或缺的神器!

如何分析一下自己的web项目的性能消耗&#xff0c;一般我们会在开始与结束加时间相减打印出消耗时间。这种方法侵入率太高了&#xff0c;如果想利用arthas整体调优一下自己web项目的性能点的话&#xff0c;可以使用以下的步骤或思路。&#xff08;当然xrebel也是一个不错的选择…

进程的创建和回收

一、进程概念&#xff1a;程序运行的状态 程序&#xff1a; 1.存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 2.静态的 进程&#xff1a; 1.执行一个程序所分配的资源的总称 2.动态的 进程和程序内容区别 进程包含的内容&#xff1a; BSS段&#xf…

Buffer Pool

Buffer Pool Innodb 存储引擎设计了一个缓冲池&#xff0c;来提升读写的性能。 在 MySQL 启动的时候&#xff0c;InnoDB 会为 Buffer Pool 申请一片连续的内存空间&#xff0c;然后按照默认的16KB的大小划分出一个个的页&#xff0c; Buffer Pool 中的页就叫做缓存页。此时这些…

java 社区人口管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 社区人口管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

Linux安装Zookeeper、Hadoop、Hive、Hbase全家桶系列

目录 Linux安装配置Zookeeper Linux安装配置Hadoop Linux安装Hbase Linux安装配置Zookeeper 新建文件夹 mkdir /home/zookeeper 下载到指定文件夹 官网 Apache ZooKeeper wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz…

Jmeter的JSON断言

JSON断言是测试工作中经常用到的一种断言方法&#xff0c;一般用于断言某个字段值是否等于我们指定的值。所以JSON断言只能针对响应结果为applicaton/json格式的进行断言操作。 如果是其他类型&#xff08;如&#xff1a;Test、html&#xff09;&#xff0c;则无法使用这种方式…

【神经网络】tenorflow实验11--人工神经网络(2)

1. 实验目的 ①掌握梯度下降法的优化算法&#xff1b; ②能够使用tf.keras构建Sequential模型&#xff0c;完成多分类任务。 2. 实验内容 ①下载MNIST数据集&#xff0c;建立神经网络模型&#xff0c;实现对MNIST手写数字数据集的识别&#xff0c;调整超参数和训练参数&…

公网对讲SDK——对讲应用场景

anyRTC 公网对讲 SDK的发布&#xff0c;解决了开发者想做公网对讲应用但没有技术的困境&#xff1b;SDK全平台支持的特性&#xff0c;让开发者可以在任何平台接入对讲能力&#xff1b;同时因为包体积小、对业务零入侵等特性被运用到各行各业中&#xff0c;下面咱们就来聊一聊公…