当前位置: 首页 > news >正文

Redis学习-----Redis的基本数据类型

        Redis(Remote Dictionary Server)即远程字典服务,是一个开源的、使用 C 语言编写的、支持网络交互的、可基于内存也可持久化的日志型、Key-Value 数据库。它最早由意大利人 Salvatore Sanfilippo 开发,于 2009 年首次发布。​与传统的关系型数据库不同,Redis 的数据主要存储在内存中,这使得它的读写速度非常快,能够轻松应对每秒数万次的操作。同时,Redis 也支持数据的持久化,可以将内存中的数据定期写入到硬盘中,以防止数据丢失。此外,Redis 还提供了丰富的数据结构和功能,如字符串、哈希、列表、集合、有序集合等,以及事务、发布订阅、Lua 脚本等高级特性,使其不仅可以作为缓存使用,还能用于实现分布式锁、计数器、排行榜等多种功能。

        Redis 提供了多种数据类型,每种数据类型都有其独特的特点和适用场景,掌握这些数据类型是使用 Redis 的基础。

(一)字符串

        字符串是 Redis 最基本的数据类型,它可以存储任何形式的字符串,包括二进制数据,最大长度为 512MB。字符串类型是其他数据类型的基础,很多高级功能都是基于字符串类型实现的。常见的操作命令主要有:​

(1)SET key value:设置指定 key 的值。​

(2)GET key:获取指定 key 的值。​

(3)INCR key:将 key 中存储的数字值加 1,若 key 不存在,则初始化为 0 后再加 1。​

(4)DECR key:将 key 中存储的数字值减 1,若 key 不存在,则初始化为 0 后再减 1。​

(5)APPEND key value:将 value 追加到 key 原来的值的末尾。

        例如

SET name "Redis"
GET name  # 返回"Redis"
INCR count  # count不存在,初始化为0后加1,返回1
INCR count  # 返回2
DECR count  # 返回1
APPEND name " Database"  # name的值变为"Redis Database"

(二)哈希

        哈希类型类似于 Java 中的 HashMap,是一个键值对的集合,其中每个键值对的键和值都是字符串类型。哈希类型适合存储对象,如用户信息、商品信息等,可以方便地对对象的各个字段进行操作。常见的哈希操作命令有:​

(1)HSET key field value:将哈希表 key 中的字段 field 的值设为 value。​

(2)HGET key field:获取哈希表 key 中字段 field 的值。​

(3)HDEL key field:删除哈希表 key 中字段 field。​

(4)HGETALL key:获取哈希表 key 中所有的字段和值。​

(5)HKEYS key:获取哈希表 key 中所有的字段。​

(6)HVALS key:获取哈希表 key 中所有的值。

        代码实例:

HSET user:1 name "John" age "25" gender "male"
HGET user:1 name  # 返回"John"
HGETALL user:1  # 返回name "John" age "25" gender "male"
HKEYS user:1  # 返回name age gender
HVALS user:1  # 返回"John" "25" "male"
HDEL user:1 gender  # 删除gender字段

(三)列表

        列表是一个有序的字符串列表,它可以按照插入顺序存储多个字符串元素,允许重复元素。列表的底层实现是双向链表,这使得在列表的两端进行插入和删除操作非常高效。常见的列表的操作命令有:

(1)LPUSH key value1 value2 ...:将一个或多个值插入到列表 key 的头部。​

(2)RPUSH key value1 value2 ...:将一个或多个值插入到列表 key 的尾部。​

(3)LPOP key:移除并返回列表 key 的头部元素。​

(4)RPOP key:移除并返回列表 key 的尾部元素。​

(5)LRANGE key start stop:返回列表 key 中从索引 start 到 stop 的元素(包含 start 和 stop),索引从 0 开始,负数表示从尾部开始计数。​

(6)LLEN key:获取列表 key 的长度。

        代码实例

LPUSH fruits "apple" "banana"  # 列表头部插入apple、banana,列表为[banana, apple]
RPUSH fruits "orange"  # 列表尾部插入orange,列表为[banana, apple, orange]
LPOP fruits  # 移除并返回banana,列表变为[apple, orange]
LRANGE fruits 0 1  # 返回apple、orange
LLEN fruits  # 返回2

(四)集合

        

        集合是一个无序的字符串集合,它不允许重复元素。集合中的元素是唯一的,这使得它非常适合用于存储需要去重的数据,如用户的标签、好友列表等。​常见的集合操作命令主要有:​

(1)SADD key member1 member2 ...:向集合 key 中添加一个或多个成员。​

(2)SMEMBERS key:返回集合 key 中的所有成员。​

(3)SREM key member1 member2 ...:移除集合 key 中的一个或多个成员。​

(4)SISMEMBER key member:判断 member 是否是集合 key 的成员。​

(5)SCARD key:获取集合 key 的成员数量。​

(6)SUNION key1 key2 ...:返回多个集合的并集。​

(7)SINTER key1 key2 ...:返回多个集合的交集。​

(8)SDIFF key1 key2 ...:返回多个集合的差集。

        代码实例:

SADD tags "java" "python" "redis"
SMEMBERS tags  # 返回java、python、redis(顺序不确定)
SISMEMBER tags "java"  # 返回1(存在)
SREM tags "python"  # 移除python
SCARD tags  # 返回2
SADD tags2 "redis" "mysql" "mongodb"
SUNION tags tags2  # 返回java、redis、mysql、mongodb
SINTER tags tags2  # 返回redis
SDIFF tags tags2  # 返回java

(五)有序集合

        有序集合与集合类似,也是一个不允许重复元素的集合,但它为每个元素关联了一个分数(score),并根据分数对元素进行排序。有序集合适合用于实现排行榜、优先级队列等功能。常见的有序集合的操作命令有:

(1)ZADD key score1 member1 score2 member2 ...:向有序集合 key 中添加一个或多个成员,并为每个成员设置分数。​

(2)ZRANGE key start stop [WITHSCORES]:返回有序集合 key 中从索引 start 到 stop 的成员(包含 start 和 stop),按照分数从小到大排序,若指定 WITHSCORES,则同时返回分数。​

(3)ZREVRANGE key start stop [WITHSCORES]:返回有序集合 key 中从索引 start 到 stop 的成员,按照分数从大到小排序。​

(4)ZREM key member1 member2 ...:移除有序集合 key 中的一个或多个成员。​

(5)ZSCORE key member:获取有序集合 key 中成员 member 的分数。​

(6)ZCARD key:获取有序集合 key 的成员数量。​

(7)ZINCRBY key increment member:为有序集合 key 中成员 member 的分数增加 increment。

        代码实例:

ZADD ranking 90 "Alice" 85 "Bob" 95 "Charlie"
ZRANGE ranking 0 2 WITHSCORES  # 返回Bob 85、Alice 90、Charlie 95
ZREVRANGE ranking 0 2 WITHSCORES  # 返回Charlie 95、Alice 90、Bob 85
ZSCORE ranking "Alice"  # 返回90
ZINCRBY ranking 5 "Alice"  # Alice的分数变为95
ZCARD ranking  # 返回3
ZREM ranking "Bob"  # 移除Bob

http://www.dtcms.com/a/309083.html

相关文章:

  • Dify版本升级实操
  • Edge中如何找到原IE浏览器的Internet选项
  • 基于html,css,jquery,django,lstm,cnn,tensorflow,bert,推荐算法,mysql数据库
  • 8月1日RED指令强制生效,您的设备准备好了吗?
  • uniapp 开发微信小程序,获取经纬度(uni.getLocation)并且转化详细地址(‌高德地图逆地理编码API、‌腾讯地图逆地理编码)
  • 【华为机试】127. 单词接龙
  • Python match-case 模式匹配详解
  • 【Mysql】字段隐式转换对where条件和join关联条件的影响
  • 【Java面试题】缓存穿透
  • 什么是doris
  • 优化网站域名的SEO策略指南
  • Qt开发中的安全技术问题详解
  • MySQL(172)如何进行MySQL的全局变量设置?
  • 深度揭秘端口映射:原理、场景、路由映射故障,与内网IP端口映射外网工具的选择
  • 微服务消息队列之RabbitMQ,深入了解
  • 逻辑斯蒂回归的模型优化
  • IO流-文件实例
  • MySQL--组从复制的详解及功能演练
  • 数据赋能(371)——数据挖掘——概述
  • java的冒泡排序算法
  • 从O(n²)到O(n log n):深度剖析快速排序的内存优化与cache-friendly实现
  • Java Map和Set
  • Vue 3.5 defineModel:让组件开发效率提升 10 倍
  • 自行实现log2对数运算
  • Pydantic模块学习
  • TDengine 中 TDgp 中添加机器学习模型
  • AT6668B芯片说明书
  • unity学习——视觉小说开发(一)
  • 51单片机入门:模块化编程
  • 用 TensorFlow 1.x 快速找出两幅图的差异 —— 完整实战与逐行解析 -Python程序图片找不同