Redis数据类型-五大基本数据类型

文章目录

  • Redis五大数据类型
    • String(字符串)
    • List(列表)
    • Set(集合)
    • Hash(哈希)
    • Zset(有序集合)
  • 总结

Redis五大数据类型

String(字符串)

String基本命令:

127.0.0.1:6379> set key1 hello  	#设置值
OK
127.0.0.1:6379> get key1			# 获取值
"hello"
127.0.0.1:6379> keys *				#获取所有的key
1) "key1"
127.0.0.1:6379> APPEND key1 world	#追加字符串,如果当前key不存在,就相当于set命令
(integer) 10
127.0.0.1:6379> get key1
"helloworld"
127.0.0.1:6379> EXISTS key1			# 判断字符串是否存在
(integer) 1
127.0.0.1:6379> STRLEN key1			# 获取字符串的长度
(integer) 10###################################################
#步长 i++
127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> get view 
"0"
127.0.0.1:6379> INCR view			#自增1
(integer) 1
127.0.0.1:6379> INCR view
(integer) 2
127.0.0.1:6379> INCR view
(integer) 3
127.0.0.1:6379> DECR view			#自减1
(integer) 2
127.0.0.1:6379> DECR view
(integer) 1
127.0.0.1:6379> INCRBY view 10		#设置步长指定增量
(integer) 11###################################################
#字符串范围 range
127.0.0.1:6379> set key "hello world"
OK
127.0.0.1:6379> get key
"hello world"
127.0.0.1:6379> GETRANGE key 0 3	#截取字符串[0,3]
"hell"
127.0.0.1:6379> GETRANGE key 0 -1	#获取全部字符串和get key是一样的
"hello world"# 替换
127.0.0.1:6379> SETRANGE key 5 fucking	#指定开始字符位置
(integer) 12
127.0.0.1:6379> get key
"hellofucking"###################################################
# setex(set with expire) #设置过期时间
# setnx(set if not exit) # 不存在则设置
127.0.0.1:6379> setex key3 10 "hello"	#设置30s过期
OK
127.0.0.1:6379> ttl key3
(integer) 3
127.0.0.1:6379> set mykey "redis"
OK
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> setnx mykey "redis" 
(integer) 1
127.0.0.1:6379> setnx mykey "mongodb"
(integer) 0
127.0.0.1:6379> get mykey
"redis"###################################################
# mset 批量设置
# mget 批量获取
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
3) "k3"
127.0.0.1:6379> MGET k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 v1 k4 v4	# msetnx 是一个原子性操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)###################################################
# getset 先获取再设置
127.0.0.1:6379> getset db "redis"	#如果不存在返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> GETSET db "mongodb"	#如果存在,返回当前值再设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"

String的使用场景

  1. 计数器
  2. 统计多单位的数量
  3. 粉丝数
  4. 对象缓存存储

List(列表)

list基本命令:

#LPUSH
127.0.0.1:6379> LPUSH list one	#将一个值或者多个值放到列表的头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1	#获取list的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1
1) "three"
2) "two"#RPUSH
127.0.0.1:6379> RPUSH list right	#将一个值或者多个值放到列表的尾部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"# LPOP
127.0.0.1:6379> LPOP list	#移除list的第一个元素
"three"
127.0.0.1:6379> RPOP list	#移除list最后一个元素
"right"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"# lindex
127.0.0.1:6379> lindex list 1	#通过下标获取值
"one"
127.0.0.1:6379> lindex list 0
"two"127.0.0.1:6379> LLEN list	#返回列表的长度
(integer) 2#LREM 移除指定的值
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LREM list 1 three	#移除指定个数的value 精确匹配
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LPUSH list three
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LREM list 2 three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"# trim 截取
127.0.0.1:6379> RPUSH list "hello"
(integer) 3
127.0.0.1:6379> RPUSH list "world"
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "hello"
4) "world"
127.0.0.1:6379> LTRIM list 1 2	#通过下标截取指定的长度,这个list已经改变,只剩下截取的元素
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
2) "hello"#rpoplpush 移除列表的最后一个元素并移动到新的列表中
127.0.0.1:6379> rpoplpush list mylist
"hello"
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"#lset 将列表中指定下标的值替换新的值。更新操作
127.0.0.1:6379> EXISTS list
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 item
OK
127.0.0.1:6379> LRANGE list 0 0
1) "item"
127.0.0.1:6379> lset list 1 update # 如果不存在则报错
(error) ERR index out of range# linsert 将某一个具体的值插入到列表中某个元素的前面或者后面
127.0.0.1:6379> LINSERT list before item preone
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "preone"
2) "item"
127.0.0.1:6379> LINSERT list after item afterone
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "preone"
2) "item"
3) "afterone"
  • list实际上是一个列表,before、after、left、right都可以插入值
  • 如果key不存在创建新的链表
  • 如果key存在新增内容

list使用场景:

  1. 消息队列 (LPUSH RPOP)
  2. 栈(LPUSH LPOP)

Set(集合)

set中的值是不重复的,无序不重复集合

# sadd 添加元素
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> sadd myset "happy"
(integer) 1
127.0.0.1:6379> sadd myset "new"
(integer) 1
127.0.0.1:6379> sadd myset "year"
(integer) 1
127.0.0.1:6379> SMEMBERS myset #查看元素
1) "world"
2) "new"
3) "hello"
4) "happy"
5) "year"
127.0.0.1:6379> SISMEMBER myset hello	#判断元素是否存在
(integer) 1
127.0.0.1:6379> SISMEMBER myset bb
(integer) 0
127.0.0.1:6379> SCARD myset	#获取set集合中的内容元素个数
(integer) 5
127.0.0.1:6379> SREM myset happy	#移除指定元素
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "world"
2) "hello"
3) "year"
4) "new"# SRANDMEMBER 随机抽选一个元素
127.0.0.1:6379> SRANDMEMBER myset
"world"
127.0.0.1:6379> SRANDMEMBER myset
"new"
127.0.0.1:6379> SRANDMEMBER myset
"year"
127.0.0.1:6379> SRANDMEMBER myset 2	#指定个数的元素
1) "new"
2) "year"# SMOVE 将一个指定的值从当前set集合移动到另一个set集合
127.0.0.1:6379> SMOVE myset myset2 year
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "world"
2) "hello"
3) "new"
127.0.0.1:6379> SMEMBERS myset2
1) "year"# SDIFF差集 SINTER交集(共同好友) SUNION 并集
127.0.0.1:6379> SDIFF myset1 myset2
(empty list or set)
127.0.0.1:6379> SDIFF myset myset2
1) "world"
2) "hello"
127.0.0.1:6379> SINTER myset myset2
1) "new"
127.0.0.1:6379> SDIFF myset2 myset
1) "year"
127.0.0.1:6379> SUNION myset myset2
1) "world"
2) "year"
3) "new"
4) "hello"

Set的应用场景:

  1. 共同关注
  2. 好友推荐

Hash(哈希)

hash基本命令:

#hset
127.0.0.1:6379> hset myhash filed1 test	#设置一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash filed1
"test"
127.0.0.1:6379> hset myhash filed2 world
(integer) 1
127.0.0.1:6379> hmset myhash filed1 hello filed3 yes	#设置多个key-value
OK
127.0.0.1:6379> hmget myhash filed1 filed2 filed3	#获取多个key的值
1) "hello"
2) "world"
3) "yes"
127.0.0.1:6379> HGETALL myhash	#获取所有的key-value
1) "filed1"
2) "hello"
3) "filed2"
4) "world"
5) "filed3"
6) "yes"# HDEL删除一个key
127.0.0.1:6379> HDEL myhash filed3
(integer) 1
127.0.0.1:6379> HGETALL myhash
1) "filed1"
2) "hello"
3) "filed2"
4) "world"# 查看hash表的字段数量
127.0.0.1:6379> HLEN myhash
(integer) 2# 判断key是否存在
127.0.0.1:6379> HEXISTS myhash filed3
(integer) 0
127.0.0.1:6379> HEXISTS myhash filed1
(integer) 1# hkeys(只获取key) hvals(只获取value)
127.0.0.1:6379> hkeys myhash
1) "filed1"
2) "filed2"
127.0.0.1:6379> hvals myhash
1) "hello"
2) "world"# HINCRBY 指定增量
127.0.0.1:6379> hset myhash filed3 5
(integer) 1
127.0.0.1:6379> hget myhash filed3
"5"
127.0.0.1:6379> HINCRBY myhash filed3 1
(integer) 6
127.0.0.1:6379> hget myhash filed3
"6"
127.0.0.1:6379> HINCRBY myhash filed3 -3
(integer) 3

Hash的应用场景:

  1. 用户信息保存,对象的存储
  2. 经常变动信息的保存

Zset(有序集合)

zset在set的基础上增加了score,set k1 score v1

# zadd 添加一个值
127.0.0.1:6379> ZADD myset 1 one
(integer) 1
127.0.0.1:6379> ZADD myset 1 two
(integer) 1
127.0.0.1:6379> ZADD myset 2 three
(integer) 1
127.0.0.1:6379> ZADD myset 3 four
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> ZADD myset 2 five 5 six	#批量添加
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "five"
4) "three"
5) "four"
6) "six"# ZRANGEBYSCORE排序-升序
127.0.0.1:6379> zadd salary 500 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 5000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 1000 wangwu
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "zhangsan"
2) "wangwu"
3) "lisi"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf
1) "zhangsan"
2) "wangwu"
3) "lisi"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores
1) "zhangsan"
2) "500"
3) "wangwu"
4) "1000"
5) "lisi"
6) "5000"
127.0.0.1:6379> ZRANGEBYSCORE salary (0 5000
1) "zhangsan"
2) "wangwu"
3) "lisi"#ZREVRANGE 降序
127.0.0.1:6379> ZREVRANGE salary 0 -1 withscores
1) "lisi"
2) "5000"
3) "wangwu"
4) "1000"
5) "zhangsan"
6) "500"# zcard 查询集合元素个数
127.0.0.1:6379> zcard salary
(integer) 3
# ZCOUNT 统计指定区间的元素数量
127.0.0.1:6379> ZCOUNT salary 500 1000
(integer) 2

Zset使用场景:

  1. 排序-排行榜
  2. 加权-对消息的重要性进行区分

总结

以上是Redis五大数据类型的基本命令以及使用场景介绍,更详细可以查看Redis官方文档

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

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

相关文章

深入玩转Playwright:高级操作解析与实践

playwright高级操作 iframe切换 ​ 很多时候,网页可能是网页嵌套网页,就是存在不止一个html标签,这时候我们的selenium或者playwright一般来说定位不到,为什么呢? ​ 因为默认是定位到第一个标准的html标签内部。 …

STM32——USART

一、通信 1.1通信是什么; 通信是将一个设备的数据发送到另一个设备中,从而实现硬件的扩展; 1.2通信的目的是什么; 实现硬件的扩展-在STM32中集成了很多功能,例如PWM输出,AD采集,定时器等&am…

小程序样例5:简单登录界面

基本功能 1、头像选择、用户名、密码、昵称选择、性别、城市 2、确认注册跳转 我的页面。 3、其他注册方式跳转用户名 密码登录方式 4、清除 和 密码显示按钮: 5、用户名、密码合法性校验: 6、点击微信图标,调转回微信登录: 代码…

star原则

"STAR" 原则通常用于回答面试或描述工作经验等场景中,以清晰、有条理地传达信息。"STAR" 是 Situation(情境)、Task(任务)、Action(行动)、Result(结果&#xf…

P2241 统计方形(数据加强版)题解

题目 有一个nm方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。 输入输出格式 输入格式 一行,两个正整数n,m(n≤5000,m≤5000)。 输出格式 一行,两个正整数,分别表…

部署YUM仓库服务

一、yum仓库 1. yum简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势,所以…

超超超详细讲解TCP三次握手与四次挥手(大图解),值得收藏

TCP 三次握手与四次挥手深入探究 TCP基础知识 TCP 头格式有哪些 TCP首部包括20字节的固定首部部分及长度可变的其他选项,所以TCP首部长度可变。20个字节又分为5部分,每部分4个字节32位,如图中的前5行,每行表示32位。 TCP 头格…

云服务器如何快速部署访问静态页面(个人网站博客等)

1,购买云服务器 2,配置安全项 云服务器ecs下,配置ip、端口所有人都可访问 3,关闭防火墙,将前端静态项目传输到云服务器上 可以使用SecureCRT,本地远程连接到服务器(需要用户名与密码&#x…

LVS常用的NAT模式和DR模式实战示例

引言:紧接上文,了解LVS,这一篇就够了-CSDN博客,今天我们对LVS常用的两种模式来进行示例配置演示 LVS-NAT模式 1、环境准备 准备 3 台纯净的虚拟机 关闭防火墙和selinux 例: lvs-server 添加两个网卡 NAT模式 …

基于连续相位负载调制的单输入宽带混合Doherty功率放大器设计(2023.05 MTT)-从理论到ADS版图

基于连续相位负载调制的单输入宽带混合Doherty功率放大器设计-从理论到ADS版图 最近开始搞大论文了,Doherty方面对最新的一些的技术看的比较少,找几个牛逼的学习一下下,虽然最后可能也用不上。已经完成了理论的推导和ADS版图仿真&#xff0c…

4、this指向、动画案例、封装、offset、client、scroll

一、this指向问题 1、在构造函数中this指向实例化对象 2、在自定义对象的函数(方法)中指向this指向当前的对象 3、在普通函数中this指向window 4、函数中this指向:在事件函数中this指向事件源 5、在定时器函数中this指向window 二、动…

原型链继承: 原理:将父类的实例作为子类的原型

function Father(){this.age10this.phone{first:"华为",second:"小米"}}Father.prototype.getagefunction(){return this.age}function Son(name,money){this.namenamethis.moneymoney}Son.prototypenew Father() //子类型的原型为父类型的一个实例对象Son…

Jython调用openwire库连接activemq转发topic订阅消息到另一个activemq 服务器上 完整代码

以下是一个示例代码,演示如何在Jython中使用OpenWire库连接ActiveMQ,将一个主题(topic)上的订阅消息转发到另一个ActiveMQ服务器上: from org.apache.activemq import * from org.apache.activemq.transport import *…

7-上传下载

上传下载 首先创建一张上传文件的表,例如: drop table if exists sys_file_info; create table sys_file_info (file_id int(11) not null auto_increment comment 文件id,file_name varchar(50) default …

动态分析C语言代码生成函数调用关系的利器——gprof

大纲 准备工作下载libevent代码安装编译依赖编译libevent 收集运行数据编译插入检测代码的可执行程序收集数据 数据转换环境准备转换为dot 转换为图片环境准备转换图片 参考代码参考资料 gprof是一个C语言程序性能分析工具。在编译期间,我们给编译指令增加-pg选项&a…

第 8 章:Linux中使用时钟、计时器和信号

在本章中,我们将开始探索Linux环境中可用的各种计时器。随后,我们将深入了解时钟的重要性,并探讨UNIX时间的概念。接下来,我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后,我们将进入std::chrono的领域&…

20240130收获

el-table-column的formatter属性的回调函数会传给我们row的数据,即直接把整行的数据给到我们了,而不是给我们该列的数据。所以我们应该通过{xx}解构的方式来取我们要的属性。解构的时候,不要写错了,比如obj.name,我们想…

创业7年复盘,中美企业服务市场差异浅析

2024 年伊始,Kyligence 联合创始人兼 CEO 韩卿在公司内部的飞书订阅号发表了多篇 Rethink Data & Analytics 的内部信,分享了对数据与分析行业的一些战略思考,尤其是 AI 带来的各种变化和革命,是如何深刻地影响这个行业乃至整…

一篇文带你使用js实现拖拽排序

先介绍一下html5的drag属性,拖放(Drag 和 drop)是 HTML5 标准的组成部分。想要启用drag,只要给元素加上draggable"true"就行了(Safari 5.1.2除外)。   实际效果: 拖动事件(了解事件详情)   事…

Node.js 模块化

一、介绍 1.1 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他 模块使用 1…