首页 > 数据库 >Redis从入门到放弃(2):数据类型

Redis从入门到放弃(2):数据类型

时间:2023-08-03 19:36:57浏览次数:28  
标签:有序 入门 示例 数据类型 Redis 列表 类型 哈希 集合



文章目录

  • 1. 字符串(String)
  • 1.1、介绍
  • 1.2、命令示例
  • 1.3、注意事项
  • 2. 哈希(Hash)
  • 2.1、介绍
  • 2.2、命令示例
  • 2.3、注意事项
  • 3. 列表(List)
  • 3.1、介绍
  • 3.2、命令示例
  • 3.3、注意事项
  • 4. 集合(Set)
  • 4.1、介绍
  • 4.2、命令示例
  • 5. 有序集合(Sorted Set)
  • 5.1、介绍
  • 5.2、命令示例
  • 6、总结



在Redis中,数据以键值对的形式存储。Redis支持五种主要的数据类型,每种类型都有不同的用途和特性。

本文将介绍Redis的五种数据类型:字符串(string),哈希(hash),列表(list),集合(set)和有序集合(sorted set)。

1. 字符串(String)

1.1、介绍

字符串是Redis中最基本的数据类型。每个键都可以关联一个字符串值,这个值可以是任何类型的数据,如文本、数字或序列化的对象。字符串类型支持一系列的操作,包括设置值、获取值、修改值以及对值进行计数和排序等。

1.2、命令示例

# 设置键的值
SET mykey "Hello Redis"

# 获取键的值
GET mykey

# 修改键的值
SET mykey "Updated value"

# 对值进行递增
INCR counter

# 对值进行排序
SORT mylist

1.3、注意事项

  • 字符串类型的值最大可以存储512MB的数据。
  • INCR 命令作用于非整型时会报错:(error) ERR value is not an integer or out of range

2. 哈希(Hash)

2.1、介绍

哈希类型在Redis中用于存储对象。一个哈希类型的键关联了一个键值对集合,其中每个键值对都是一个字段和值的组合。哈希类型适合存储结构化的数据,如用户信息、文章内容等。类似于Java的Map。

2.2、命令示例

# 设置哈希键中的字段值
HSET user:1 name "John"
HSET user:1 age 30

# 获取哈希键中的字段值
HGET user:1 name

# 删除哈希键中的字段及其值
HDEL user:1 age

# 获取哈希键中所有的字段和值
HGETALL user:1

2.3、注意事项

  • HSET 命令不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入还是更新操作。

3. 列表(List)

3.1、介绍

列表类型是一个有序的字符串集合。列表中的每个元素都有一个索引,可以根据索引进行访问和操作。列表类型支持在头部和尾部进行元素的插入和删除操作,可以实现队列、栈等数据结构。

3.2、命令示例

# 将值插入列表的头部
LPUSH mylist "one"
LPUSH mylist "two"

# 将值插入列表的尾部
RPUSH mylist "three"
RPUSH mylist "four"

# 从列表的头部弹出一个值
LPOP mylist

# 从列表的尾部弹出一个值
RPOP mylist

# 获取列表中指定范围内的元素
LRANGE mylist 0 -1

3.3、注意事项

  • 列表类型的元素可以重复。
  • 列表类型支持按索引进行快速访问和操作。
  • 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

4. 集合(Set)

4.1、介绍

集合类型是一个无序、唯一的字符串集合。集合中的元素没有重复,可以进行交集、并集、差集等集合运算。集合类型适合存储不重复的元素,如标签、用户的兴趣爱好等。

4.2、命令示例

# 向集合添加一个成员
SADD tags "redis"
SADD tags "database"

# 从集合中移除一个成员
SREM tags "database"

# 获取集合中的所有成员
SMEMBERS tags

# 获取多个集合的交集
SINTER set1 set2

注意事项:

  • 集合类型的元素是无序的,不支持按索引访问。
  • 集合类型是通过哈希表实现的,操作具有高效的性能,可以快速执行集合运算。

5. 有序集合(Sorted Set)

5.1、介绍

有序集合类型是一个有序的字符串集合,每个元素都与一个分数相关联。有序集合中的元素按照分数进行排序,并且每个元素都是唯一的。有序集合类型适合存储排行榜、排序结果等需要按照顺序访问的数据。

5.2、命令示例

# 向有序集合添加一个成员,并指定其分数
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"

# 从有序集合中移除一个成员
ZREM leaderboard "player2"

# 获取有序集合中指定范围内的成员
ZRANGE leaderboard 0 -1

# 获取有序集合中指定成员的分数
ZSCORE leaderboard "player1"

注意事项:

  • 有序集合类型的元素按照分数进行排序,可以根据分数范围快速获取成员。
  • 有序集合类型的操作具有高效的性能,可以快速执行排序和排名相关的操作。

6、总结

以表格方式总结:

类型

简介

特性

场景

String(字符串)

二进制安全

可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M


Hash(字典)

键值对集合,即编程语言中的Map类型

适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)

存储、读取、修改用户属性

List(列表)

链表(双向链表)

增删快,提供了操作某一段元素的API

1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列

Set(集合)

哈希表实现,元素不重复

1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作

1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

Sorted Set(有序集合)

将Set中的元素增加一个权重参数score,元素按score有序排列

数据插入集合时,已经进行天然排序

1、排行榜 2、带权重的消息队列


标签:有序,入门,示例,数据类型,Redis,列表,类型,哈希,集合
From: https://blog.51cto.com/u_13693015/6952282

相关文章

  • 怎么设置centos限定redis使用的内存
    1、Redis-Cluster集群2、怎么设置centos限定redis使用的内存3、高性能高并发网站架构,教你搭建Redis5缓存集群4、Redis-Cluster5、「实用教程」在配备持久内存的实例上部署Redis应用Redis-Cluster集群1、连接如下https://redis.io/topics/cluster-tutorial以下步骤是在一......
  • 新一代开源流数据湖平台Apache Paimon入门实操-上
    @目录概述定义核心功能适用场景架构原理总体架构统一存储基本概念文件布局部署环境准备环境部署实战Catalog文件系统HiveCatalog创建表创建Catalog管理表查询创建表(CTAS)创建外部表创建临时表修改表修改表修改列修改水印概述定义ApachePaimon官网https://paimon.apache.org......
  • T4 模板: 为 ASP.NET MVC 开发人员快速入门指南
    http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在中提到我们的最近博客文章,ASP.NETMVC发布候选版,我们的代码生成功能(即,添加控制器和添加视图)现在使用T4(文本模板转换工具包)模板化技术在幕后。因为......
  • elasticsearch集群等概念入门
    欢迎来到Elasticsearch的奇妙世界,它是优秀的全文检索和分析引擎。不管你对Elasticsearch和全文检索有没有经验,都不要紧。我们希望你可以通过这本书,学习并扩展Elasticsearch的知识。由于这本书也是为初学者准备的,我们决定先简单介绍一般性的全文检索概念,接着再简要概述Elasticsearch......
  • Java入门题-百钱买百鸡
    题:100钱买100只鸡,必须满足,钱花完,鸡百只 重点:循环语句来枚举所有可能性 代码:byteplan=1;for(inti=0;i<20;i++){for(inti1=0;i1<34;i1++){for(inti2=0;i2<101;i2++){if(((i*5+i1*3+i2)==100)&&((i+i1......
  • 虹科干货 | DevOps 团队为什么独独青睐 Redis Enterprise ?
    快速部署是保障成功的DevOps的关键要素。虹科RedisEnterprise提供了一种快速的数据库。01DevOps团队面临的挑战1.提高应用程序处理速度,赢得商业竞争许多企业中,DevOps团队(DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合)正......
  • 虹科分享 | 妙招频出,Redis 企业版这样解决缓存问题→
    为什么企业需要数字化?数字化转型的根本目的是什么?数据的缓存为什么如此的重要?虹科RedisEnterprise又能够在哪些方面助力企业解决数据处理难题?01当前数据库缓存面临的挑战:使用当前数据库实现速度和可扩展性实现满足用户期望所需的数据性能并不容易。企业需要应对遗留基础设施、缓......
  • 使用redis-py的两个类Redis和StrictRedis时遇到的坑
    redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedis.set方法)。Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。简单说,官方推荐使用StrictRedis方法。  不推荐Redis类,原......
  • pyredis使用场景
    1.安装pyredis首先安装pip <SHELL>#apt-getinstallpython-pip......<SHELL>#pipinstall--proxy=http://172.1.2.6:8080redisDownl......
  • 巧用Redis实现分布式锁详细介绍_Redis
    目录前言手写Redis分布式锁Redissonlock()lock(longleaseTime,TimeUnitunit)tryLock(longwaitTime,longleaseTime,TimeUnitunit)RedLock红锁总结前言无论是synchronized还是Lock,都运行在线程级别上,必须运行在同一个JVM中。如果竞争资源的进程不在同一个JVM中时,......