redis数据类型
Redis 数据类型
- redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型
1. 字符串操作
- set key value [ex seconds] [px milliseconds] [nx|xx]
- 设置key及值,过期时间可以使用秒或毫秒为单位
- [ex seconds]是设置过期时间的,单位是秒,默认是永不过期;[px milliseconds]也是设置过期时间的,单位是毫秒;[nx|xx]中的nx是当设置变量的变量存在时,就不再赋值这个变量了,xx是当这个变量存在时,赋入新的值。
-
- ex 设置过期时间
//创建key名=name,key值=bob,过期时间为10秒
127.0.0.1:6379> set name bob ex 10
OK
127.0.0.1:6379> ttl name
(integer) 4 ---还剩下四秒就过期了
127.0.0.1:6379> ttl name
(integer) -2 ---已经过期了
-
- nx 当没有输入key名,就定义存储,反之如果有这个key名时,就不定义存储数据了
127.0.0.1:6379> set id 88
OK
127.0.0.1:6379> keys *
1) "id"
127.0.0.1:6379> get id
88
127.0.0.1:6379> set id 99 nx ------返回值是(nil),意思就是没有存储id这个变量
(nil)
127.0.0.1:6379> get id ---因为id这个key名已经存在所以set id 99 nx操作无效
"88"
- 3. xx 意思是不管key名存在不存在,都对这个key名进行定义并存储(默认就是xx)
127.0.0.1:6379> get id --查看id的key值
"99"
127.0.0.1:6379> set id 100 xx --覆盖key名为id的值为100
OK
127.0.0.1:6379> get id ---查看id的值99改为100
"100"
- setrange key offset value ------从偏移量开始复写key的特定位的值
127.0.0.1:6379> set name bob -----创建key名=name,key值=bob
OK
127.0.0.1:6379> get name ----查看key名=name的值
"bob"
127.0.0.1:6379> setrange name 2 y -----修改从key值=bob的第二个字符开始修改为y,计算是从0开始的。
(integer) 3
127.0.0.1:6379> get name ----查看name的值
"boy"
127.0.0.1:6379> setrange name 0 andy
(integer) 4
127.0.0.1:6379> get name
"andy"
- strlen key ------统计字符串长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> strlen name ----查看name值的字符串长度为4
(integer) 4
- append key value -------key值存在则追加,不存在则创建key及value,返回key长度
127.0.0.1:6379> get name
"andy"
127.0.0.1:6379> append name db --在key值为andy的后面添加db这两个字符。
(integer) 6
127.0.0.1:6379> get name ---查看name的值
"andydb"127.0.0.1:6379> keys *
1) "name"
2) "id"
127.0.0.1:6379> append age 28 ----可以看的出来age不存在,所以这条命令意思是创建key名=age,key值=28
(integer) 2
127.0.0.1:6379> get age
"28"
- setbit key offset value ------位存储
- bitcount key —查询key值为1的数量
- 1T=1024G、1G=1024M、1M=1024K、1K=1024字节、1字节=8位、1位=0或1
- 使用场景:
-
记录网站用户上线频率,如用户A上线了多少天等类似的数据
-
如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可。
-
这样,即使网站运行10年,每个用户仅占用10*365比特位即456字节。
- 对key所存储的字串,设置或清除特定偏移量上的位(bit)
- value的值可以为1或0,offset为0~2^32之间
- key不存在,则创建新的key
//假如1位在线天数,0代表不在线,yy为用户
127.0.0.1:6379> setbit yy 1 1
(integer) 0
127.0.0.1:6379> setbit yy 2 0
(integer) 0
127.0.0.1:6379> setbit yy 3 1
(integer) 0
127.0.0.1:6379> setbit yy 4 1
(integer) 0
127.0.0.1:6379> setbit yy 5 0
(integer) 0
127.0.0.1:6379> setbit yy 6 1
(integer) 0
127.0.0.1:6379> setbit yy 7 1
(integer) 0
127.0.0.1:6379> bitcount yy ---统计用户yy一周在线天数为5
(integer) 5
- decr key -----将key中的值减1,key不存在则先初始化为0,再减1
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> decr age ---age的值为28-1=27
(integer) 27
127.0.0.1:6379> get age
"27"127.0.0.1:6379> decr bb ----当bb不存在时就是0-1=-1
(integer) -1
127.0.0.1:6379> get bb
"-1"
- decrby key decrement ---------将key中的值,减去decrement。decrement只能为整数
127.0.0.1:6379> get age
"27"
127.0.0.1:6379> decrby age 2 age值27-2=25
(integer) 25
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> decrby age 5 age值25-5=20
(integer) 20
127.0.0.1:6379> get age
"20"
- incr key --------将key的值加1,如果key不存在,则初始为0后再加1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age age的值加一:20+1=21
(integer) 21127.0.0.1:6379> keys *
1) "yy"
2) "bb"
3) "id"
4) "name"
5) "age"
127.0.0.1:6379> incr ys ys不存在,所以是0+1=1
(integer) 1
127.0.0.1:6379> get ys
"1"
- incrby key increment ------将key的值增加increment。decrement只能为整数
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 20 age的值加二十:21+20=41
(integer) 41
127.0.0.1:6379> get age
"41"
- incrbyfloat key increment -----为key中所储存的值加上浮点数增量 increment
127.0.0.1:6379> set id 20
OK
127.0.0.1:6379> get id
"20"
127.0.0.1:6379> incrbyfloat id 0.3 ---id的值加零点三:20+0.3=20.3
"20.3"
127.0.0.1:6379> get id
"20.3"
- getrange key start end
- 返回字串值中的子字串,截取范围为start和end
- 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
127.0.0.1:6379> set likes "Play basketball"
OK
127.0.0.1:6379> get likes
"Play basketball"127.0.0.1:6379> getrange likes 0 3 ---查看likes值的第一个字符到第四个字符,默认从0开始算的。
"Play"127.0.0.1:6379> getrange likes -2 -1 ---查看likes指的倒数第二字符和倒数第一。
"ll"
2. List列表
2.1. List列表简介
- Redis的list是一个字符队列
- 先进后出,变量中先存进去的值,是在最后显示出来的
- 一个key可以有多个值
2.2. List列表命令操作
- lpush key value [value…] -----将一个或多个值value插入到列表key的表头,key不存在,则创建key
- lrange key start stop ----从开始位置读取key的值到stop结束
127.0.0.1:6379> lpush hostname www.baidu.com www.jd.com www.taobao.com ---创建hostname的值为www.baidu.com、www.jd.com、www.taobao.com
(integer) 3
127.0.0.1:6379> lrange hostname 0 -1 ---查看hostname列表的值从第一个到最后一个。
1) "www.taobao.com"
2) "www.jd.com"
3) "www.baidu.com"
127.0.0.1:6379> lrange hostname 0 1
1) "www.taobao.com"
2) "www.jd.com"127.0.0.1:6379> lpush hostname www.jk.com www.sxy.com ---在hostname值追加www.jk.com、www.sxy.com
(integer) 5
127.0.0.1:6379> lrange hostname 0 -1 ---查看hostname所有的值
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
- lpop key -----移除并返回列表头元素数据(即删除列表中的第一个值),key不存在则返回nil
127.0.0.1:6379> lrange hostname 0 -1
1) "www.sxy.com"
2) "www.jk.com"
3) "www.taobao.com"
4) "www.jd.com"
5) "www.baidu.com"
127.0.0.1:6379> lpop hostname ---删除hostname第一个值:1) "www.sxy.com"
"www.sxy.com"
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
- llen key ----返回列表key值的数量
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> llen hostname ---查看hostname有多少个值
(integer) 4
- lindex key index ----查看key列表的某个值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"127.0.0.1:6379> lindex hostname -1 ---查看hostname最后一个值。
"www.baidu.com"
- lset key index value -----修改指定位置的key值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.baidu.com"
127.0.0.1:6379> lset hostname -1 www.sxy.com ---修改hostname最后一个值为www.sxy.com
OK
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
- rpush key value [value…] —在key值的最后面插入一个或者多个值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
127.0.0.1:6379> rpush hostname AAAA BBBB CCCC
(integer) 7
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
- rpop key — 删除key值的末尾的值
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
7) "CCCC"
127.0.0.1:6379> rpop hostname
"CCCC"
127.0.0.1:6379> lrange hostname 0 -1
1) "www.jk.com"
2) "www.taobao.com"
3) "www.jd.com"
4) "www.sxy.com"
5) "AAAA"
6) "BBBB"
3. Hash表
3.1. Hash表介绍
-
是一个string类型的field和value的映射表
-
一个key可对应多个field,一个field对应一个value
-
将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存
3.2. Hash表命令操作
- hset key field value ----将hash表中field值设置为value,一次给一个或多个列赋值
- hget key field -----获取hash表中field的值
- hmget key field [field …] ----获取hash表的一个列名值和多个列名值
- hgetall key ----获取hash表中的所有列名和列值
- hkeys key ----获取hash表中的所有列名
- hvals key ----获取hash表中的所有列值
- hdel key field [field …] ----删除hash表的一个列名的值和多个列名的值
127.0.0.1:6379> hset stuinfo name bob sex boy age 18 ---创建hash表名为stuinfo,列名名=name 列值=bob,列名=sex 列值=boy,列名=age 列值=18
(integer) 3127.0.0.1:6379> hget stuinfo name ---查看hash表名=stuinfo,列名=name的值
"bob"127.0.0.1:6379> hmget stuinfo name sex age ---获取hash表stuinfo的列名为:name、sex、age的值
1) "bob"
2) "boy"
3) "18"
127.0.0.1:6379> hgetall stuinfo ---获取hash表stuinfo的所有列名和列值
1) "name"
2) "andy"
3) "sex"
4) "boy"
5) "age"
6) "18"127.0.0.1:6379> hkeys stuinfo ---获取hash表stuinfo的所有列名
1) "name"
2) "sex"
3) "age"127.0.0.1:6379> hvals stuinfo ---获取hash表stuinfo的所有列值
1) "andy"
2) "boy"
3) "18"127.0.0.1:6379> hkeys stuinfo
1) "name"
2) "sex"
3) "age"
127.0.0.1:6379> hdel stuinfo name sex ----删除hash表stuinfo的列名为name、sex和值
(integer) 2
127.0.0.1:6379> hkeys stuinfo
1) "age"
相关文章:
redis数据类型
Redis 数据类型 redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型 1. 字符串操作 set key value [ex seconds] [px milliseconds] [nx|xx] 设置ke…...
【独家】华为OD机试 - 最多获得的短信条数(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

【剧前爆米花--爪哇岛寻宝】包装类的装拆箱和泛型的擦除机制
作者:困了电视剧 专栏:《数据结构--Java》 文章分布:这是关于数据结构的基础之一泛型的文章,希望对你有所帮助。 目录 包装类 装箱 装箱源码小细节 拆箱 泛型 什么是泛型 泛型编译的擦除机制 不能实例化泛型类型数组 包装…...

BufferQueue研究
我们在工作的过程中,肯定听过分析卡顿或者冻屏问题的时候,定位到APP卡在dequeueBuffer方法里面,或者也听身边的同事老说3Buffer等信息。所以3Buffer是什么鬼?什么是BufferQueue?搞Android,你一定知道Graphic Buffer和…...
【计组笔记08】计算机组成与原理之IO设备系统(输入、输出设备、外存储器)
这篇文章,主要介绍计算机组成与原理之IO设备系统(输入、输出设备、外存储器)。 目录 一、IO设备系统 1.1、IO系统的演变 (1)早期阶段 (2)接口模块和DMA阶段...

使用Vue实现数据可视化大屏功能(一)
导语 现在在很多的工程项目中,都有有关于数据大屏相关的监控内容,这里我们就来看一下如何用Vue来搭建一个数据可视化大屏应用。 创建项目 使用WebStorm工具创建一个Vue的项目。如下图所示,配置好vue的脚手架工具和nodejs的运行环境&#…...
华为OD机试真题Python实现【整数对最小和】真题+解题思路+代码(20222023)
整数对最小和 题目 给定两个整数数组 array1 array2 数组元素按升序排列 假设从array1 array2中分别取出一个元素可构成一对元素 现在需要取出K个元素 并对取出的所有元素求和 计算和的最小值 注意: 两对元素如果对应于array1 array2中的两个下标均相同,则视为同一个元素 �…...

2023年绿色建筑国际会议(ICoGB 2023)
2023年绿色建筑国际会议(ICoGB 2023) 重要信息 会议网址:www.icogb.org 会议时间:2023年5月19-21日 召开地点:斯德哥尔摩 截稿时间:2023年4月1日 录用通知:投稿后2周内 收录检索ÿ…...
【力扣1653】使字符串平衡的最少删除次数
给你一个字符串 s ,它仅包含字符 a 和 b 。你可以删除 s 中任意数目的字符,使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j ,且 s[i] b 的同时 s[j] a ,此时认为 s 是 平衡 的。请你返回使 s 平衡 的 最少 删除次数。…...

链表的中间结点与链表的倒数第k个结点(精美图示详解哦)
全文目录引言链表的中间结点题目描述与思路实现链表的倒数第k个结点题目描述与思路实现总结引言 在上一篇文章中,介绍了反转链表 我们利用了链表是逻辑连续的特点,逆置了链表的逻辑连接顺序,从而实现反转链表: 戳我查看反转链表详…...

防静电监控仪可以检测现场设备是否和实际大地接触
随着电子产品集成化度越来越高,对于电子产品装配来说,静电的危害严重影响到产品的质量、成品率和可靠性, 必须对用于电子产品装配的净化间进行系统防静电措施,将生产过程中的静电危害程度降至最低。近年来电子企业对ESD的危害的深入认识&…...

计算机网络第八版——第二章课后题答案(超详细)
第二章 该答案为博主在网络上整理,排版不易,希望大家多多点赞支持。后续将会持续更新(可以给博主点个关注~ 第一章 答案 【2-01】物理层要解决哪些问题?物理层的主要特点是什么? 解答:物理层考虑的是怎…...

2023年3月全国DAMA-CDGA/CDGP数据管理认证火热报名中...
弘博创新是DAMA中国授权的数据治理人才培养基地,贴合市场需求定制教学体系,采用行业资深名师授课,理论与实践案例相结合,快速全面提升个人/企业数据治理专业知识与实践经验,通过考试还能获得数据专业领域证书。 DAMA认…...
查询与进程调度(CFS)相关信息
目录 查询与进程相关的调度信息 查看CFS调度信息 CPU相关的信息 CFS就绪队列的总运行时间 实时队列与deadline调度的相关信息 所有进程相关的信息 查询与进程相关的调度信息 进程的nice值,优先级,调度策略,vruntime等信息。在proc目录下…...
07对MVC的理解
MVC是一种设计模式,用于将应用程序的不同方面分离开来,以便更容易地管理和维护应用程序。MVC代表模型-视图-控制器,它将应用程序分为三个主要组件:模型(Model):负责管理应用程序的数据和业务逻辑…...

WebSocket与Socket、TCP、HTTP的关系
目录:1、名词解析;2、WebSocket简介与原理;3、WebSocket和Http的关系和异同点;4、WebSocket与Socket的区别;5、Socket和TCP/IP;6、一个应用程序的通信链路;1、基础名词解析:…...

音频基础知识简述 esp-sr 上手指南
此篇博客先对音频基础知识进行简要叙述,然后帮助读者入门 esp-sr SDK。 1 音频的基本概念 1.1 声音的本质 声音的本质是波在介质中的传播现象,声波的本质是一种波,是一种物理量。 两者不一样,声音是一种抽象的,是声…...

Flex弹性布局一文通【最全Flex教学】
文章目录一.Flex布局1.1 传统布局和flex布局1.1.1 传统布局1.1.2 flex弹性布局1.2 flex初步体验1.3 布局原理二.常见Flex属性2.1 常见父项属性2.2 flex-direction主轴的方向2.3 justify-content设置主轴上的子元素排列方式2.4 设置子元素是否flex-wrap换行2.5 align-itmes设置侧…...

Navicat使用教程
Navicat:一个可以对别人的数据库进行操作的软件(需要与如mysql等数据库配套使用) 1. 下载mysql MySQL :: Download MySQL Community Server (Archived Versions) 下载上面那个版本 下载下来是个压缩包,解压 2.配置mysql (1)在…...

35岁测试人该何去何从?10年工作经验的我,只不过是一年的工作经验用了10年......
如果到了这个年龄,还是初级测试,或者只会一些简单的自动化测试,那么真的是不好干了。 35的年龄,企业对员工是有另一层面的考量。 简单来说,就是年龄上去了,能力也要上去,要么是技术专家&#…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...