Redis 数据类型及其常用命令一(string、list、set、zset、hash)

1、简介

        Redis 的常用数据类型有十种,分别为:string、list、set、zset、hash、geo、hyperloglog、bitmap、bitfield、stream。熟练使用各种数据类型,能够快速结合场景进行使用。

注:我们所说的数据类型是指 value 的数据类型,key 都是字符串。

所有类型的命令查看:help @数据类型;例如 help @string

2、Redis 的 key 常用命令
# 1、查看当前库所有key
keys *
# 2、判断某个key是否存在
exists key
# 3、查看key的类型是什么
type key
# 4、删除指定的key,会发生阻塞
del key
# 5、非阻塞删除,仅仅将key从keyspace中删除,真正删除在后续异步操作中
unlink key
# 6、查看key还有多久过期,-1表示永不过期,-2表示已过期
ttl key
# 7、给key设置过期时间
expire key
# 8、将指定的key移动到指定的数据库
move key db_index[0-15]
# 9、切换数据库
select db_index[0-15]
# 10、查看当前库key的数量
dbsize
# 11、清空当前库
flushdb
# 12、清空全部数据库
flushall
3、Redis 字符串(string)

        string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M,string类型是二进制安全的,redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。

# 1、设置值
set key value [NX|XX] [EX seconds|KEEPTTL] # 设置过期时间,keepttl在覆盖值之后继承原来的过期时间
# 2、获取值
get key
# 3、同时设置多个值
mset key value [key1 value1 ...]
# 4、同时获取多个值
mget key [key1 ...]
# 5、设置值返回旧值
getset key value
# 6、同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
msetnx key value [key1 value1 ...]
# 7、设置指定范围的值
setrange key index value  # 从index开始,将index以及index之后的用value代替
# 8、获取指定范围的值,从零到负一表示全部
getrange key begin_index end_index # 获取[begin_index,end_index]范围的value
# 9、数值增减(value一定是整型数字才行)
incr/decr key          # 增减1
incrby/decrby key num  # 增减num
# 10、获取字符串长度
strlen key
# 11、内容追加
append key value 
# 12、分布式锁
setnx key value   # key不存在设置,存在设置不成功
setex key seconds # 设置过期时间
4、Redis 列表(list)

        Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素(每个列表超过40亿个元素)。主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。

# 1、向列表中添加元素
lpush/rpush key value1 value2
# 2、获取元素
lpop/rpop key
# 3、指定下标获取元素
lrange key begin_index end_index # 获取下标范围为[begin_index,end_index]元素
# 4、按照索引下标获取元素
lindex key index
# 5、获取列表中元素个数
llen key
# 6、删除N个值为value的元素(从左往右删,如果N为0表示删除全部值为value的元素)
lrem key N value
# 7、截取指定范围的值,再赋值给key
ltrim key begin_index end_index  # 范围为[begin_index,end_index] 
# 8、移除列表的最后一个元素,并将该元素添加到另一个列表并返回
rpoplpush 源列表 目的列表
# 9、设置指定下标的值
lset key index value 
# 10、在指定的value前后插入新值
linsert key before/after 已有value 插入的新值
5、Redis 哈希(hash)

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

# 1、设置hash值
hset hash_key  k1 v1
# 2、获取hash值
hget hash_key k1
# 3、设置多个hash值
hmset hash_key  k1 v1 k2 v2 ...
# 4、获取多个hash值
hmget hash_key k1 k2 ...
# 5、获取所有的hash值
hgetall hask_key
# 6、删除hash值
hdel hash_key k1 k2 ..
# 7、获取某个key的全部hash值数量
hlen hash_key
# 8、判断某个key中是否包含指定的hash值
hexists key k1
# 9、获取全部的key/value
hkeys/hvals hash_key
# 10、给指定的hash值增加
hincrby/hincrbyfloat hash_key k1 num
# 11、hash值不存在赋值,存在了无效
hsetnx hash_key k1 v1
6、Redis 集合(set)

        Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2^32 - 1 (每个集合可存储40多亿个成员)。

# 1、添加元素
sadd key value1 value2 ...
# 2、遍历集合所有元素
smembers key
# 3、判断元素是否在集合中
sismember key value
# 4、删除元素
srem key value1 value2 ...
# 5、获取集合里面元素个数
scard key
# 6、从集合中随机选出指定个数个元素
srandmember key num 
# 7、从集合中随机弹出一个元素,弹出后会删除
spop key
# 8、将一个集合中某个值移动到另一个集合
smove key1 key2 key1中的值
# 9、差集运算
sdiff key1 key2
# 10、并集
sunion key1 key2
# 11、交集
sinter key1 key2
# 12、Redis7新增命令,指定numkeys个key做交集,返回交集中元素个数,还可以通过limit限制
SINTERCARD numkeys key [key ...] [LIMIT limit]
7、Redis 有序集合(zset)

        Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1(40多亿个)。

# 1、添加元素
zadd key score1 v1 score2 v2 ...
# 2、按照分数从小到大排序,返回指定范围数据
zrange key start end [withscores] # 范围为[start,end]
# 3、zrange反向操作
zrevrange key start end [withscores] # 范围为[start,end]
# 4、获取指定分数范围内的元素
zrangebyscore key [(]min max [withscores] [limit offset count] # 如果是开区间需要加(
# 5、获取元素分数
zscore key v1
# 6、获取集合中元素个数
zscard key
# 7、删除元素(可以删除多个)
zrem key v1 v2 ..
# 8、增加某个元素的分数
zincrby key num v1
# 9、获取指定分数范围内元素个数
zcount key min max # 范围为[min,max]
# 10、获取元素下标值
zrank key v1
# 11、获取逆序下标值
zrevrank key v1
8、总结

        本文详细介绍Redis 常用的五种数据结构:string、list、set、zset、hash,从使用命令入手,熟悉每个数据结构的使用场景和使用方式,帮助大家更加深入熟悉Redis。后文将介绍Redis另外五种数据结构。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

        

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

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

相关文章

linux系统配置zabbix监控agent端

目录 客户端配置 启动服务 浏览器工具设置 创建主机群组 创建主机 创建监控项 ​编辑 ​编辑 创建触发器 查看监控 客户端配置 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # yum clean allyum install -y zab…

安卓手机如何连接投影仪?这里提供详细步骤

安卓设备很棒,但它们的小屏幕有时会有局限性。当你将设备连接到投影仪时,你可以与他人共享屏幕以进行商务或娱乐。以下是一些方法。 如果你没有投影仪,你也可以将Android连接到电视。不过,投影仪是更好的选择,因为它们通常投影的屏幕比电视大得多,是媒体播放或数据演示的…

OS设备管理

设备管理 操作系统作为系统资源的管理者,其提供的功能有:处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机,或者可以接收…

SolidWorks如何在一个零件的基础上绘制另一个零件

经过测试,新建零件,然后插入零件a,在a的基础上绘制b,这种做法无法断开a与b的联系。虽然可以通过切除命令,切除b,但不是正途。 在装配体中可以实现: (1)建立装配体 (2&…

【MySQL】_JDBC编程

目录 1. JDBC原理 2. 导入JDBC驱动包 3. 编写JDBC代码实现Insert 3.1 创建并初始化一个数据源 3.2 和数据库服务器建立连接 3.3 构造SQL语句 3.4 执行SQL语句 3.5 释放必要的资源 4. JDBC代码的优化 4.1 从控制台输入 4.2 避免SQL注入的SQL语句 5. 编写JDBC代码实现…

牛腩新闻发布系统总结

目录 背景: 过程: 总结: 背景: 对于看牛腩视频都是每天坐立不安的事情,生怕看着看着遇到代码问题,那样自己又得需要费很大力气去解决,所以进展缓慢,之前也听过墨菲定律得书,如果不想出错的事情,那就一定…

《VulnHub》GoldenEye:1

title: 《VulnHub》GoldenEye:1 date: 2024-02-16 14:53:49 updated: 2024-02-16 15:08:49 categories: WriteUp:Cyber-Range excerpt: 主机发现、目标信息扫描、源码 js 文件泄露敏感信息、hydra 爆破邮件服务(pop3)、邮件泄露敏…

微信小程序框架阐述

目录 一、框架 响应的数据绑定 页面管理 基础组件 丰富的 API 二、逻辑层 App Service 小程序的生命周期 注册页面 使用 Page 构造器注册页面 在页面中使用 behaviors 使用 Component 构造器构造页面 页面的生命周期 页面路由 页面栈 路由方式 注意事项 模块化…

面试经典150题——最小覆盖子串(困难)

"The greatest glory in living lies not in never falling, but in rising every time we fall." - Nelson Mandela​ 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 还是和之前讲的一样,看见题目没思路,先试试普通情况下人的解法…

输入输出自定义映射矩阵(数据结构树)

输出自定义FC其它算法实现,可以参考下面文章: https://rxxw-control.blog.csdn.net/article/details/125994252https://rxxw-control.blog.csdn.net/article/details/125994252下面我们看下我们的控制要求。在学习本篇博客之前大家可以熟悉下数据结构图…

Qt Creator 继承分文件编写代码流程实现简单案列

Qt Creator 继承分文件流程实现简单案列 打开Qt Creator&#xff0c;新建c项目 添加类 完成之后&#xff0c;会自动生成.h和.cpp文件 一、animal.h文件 主要用来写类&#xff0c;包括成员变量和函数 #ifndef ANIMAL_H #define ANIMAL_H #include <iostream> #inclu…

牛客网SQL进阶123:高难度试卷的得分的截断平均值

官网链接&#xff1a; SQL类别高难度试卷得分的截断平均值_牛客题霸_牛客网牛客的运营同学想要查看大家在SQL类别中高难度试卷的得分情况。 请你帮她从exam_。题目来自【牛客题霸】https://www.nowcoder.com/practice/a690f76a718242fd80757115d305be45?tpId240&tqId2180…