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

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

1. 字符串(String)

介绍

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

命令示例

# 设置键的值
SET mykey "Hello Redis" # 获取键的值
GET mykey # 修改键的值
SET mykey "Updated value" # 对值进行递增
INCR counter # 对值进行排序
SORT mylist

注意事项

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

2. 哈希(Hash)

介绍

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

命令示例

# 设置哈希键中的字段值
HSET user:1 name "John"
HSET user:1 age 30 # 获取哈希键中的字段值
HGET user:1 name # 删除哈希键中的字段及其值
HDEL user:1 age # 获取哈希键中所有的字段和值
HGETALL user:1

注意事项

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

3. 列表(List)

介绍

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

命令示例

# 将值插入列表的头部
LPUSH mylist "one"
LPUSH mylist "two" # 将值插入列表的尾部
RPUSH mylist "three"
RPUSH mylist "four" # 从列表的头部弹出一个值
LPOP mylist # 从列表的尾部弹出一个值
RPOP mylist # 获取列表中指定范围内的元素
LRANGE mylist 0 -1

注意事项

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

4. 集合(Set)

介绍

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

命令示例

# 向集合添加一个成员
SADD tags "redis"
SADD tags "database" # 从集合中移除一个成员
SREM tags "database" # 获取集合中的所有成员
SMEMBERS tags # 获取多个集合的交集
SINTER set1 set2

注意事项

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

5. 有序集合(Sorted Set)

介绍

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

命令示例

# 向有序集合添加一个成员,并指定其分数
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从入门到放弃(2):数据类型的更多相关文章

  1. Redis 从入门到放弃

    Redis 从入门到放弃 http://www.iocoder.cn/Fight/Redis-went-from-getting-started-to-quitting/

  2. redis从入门到放弃 -> 部署方案

    单点部署方案 环境准备: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@ ...

  3. redis从入门到放弃 -> 简介&概念

    一.redis简介 Redis是一款开源的.高性能的键-值存储.它常被称作是一款数据结构服务器. 当值支持的主要数据类型为:字符串(strings)类型,括哈希(hashes).列表(lists).集 ...

  4. redis的入门篇---五种数据类型及基本操作

    查看所有的key keys * 清空所有的key flushall 检查key是否存在 exists key 设置已存在的key的时长 expire key //设置key为10s 查看key还剩多少 ...

  5. pyton全栈开发从入门到放弃之数据类型与变量

    一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...

  6. Redis——从入门到放弃

    redis简介 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, ...

  7. python入门到放弃-基本数据类型之tuple元组

    #概述 元组俗称不可变的列表,又称只读列表,是python的基本数据类型之一, 用()小括号表示,里面使用,逗号隔开 元组里面可以放任何的数据类型的数据,查询可以,循环可以,但是就是不能修改 #先来看 ...

  8. python入门到放弃-基本数据类型之dcit字典

    1.概述 字典是python中唯一的一个映射类型,以{}大括号括起来的键值对组成 字典中的key是唯一的,必须是可hash,不可变的数据类型 语法:{key1:value,key2:value} #扩 ...

  9. Redis基础入门,Redis的优点也特点,Redis五种数据类型

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. 1.Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将 ...

  10. 编程从入门到放弃(Java)

      1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利 ...

随机推荐

  1. [双目视差] 立体校正源码分析(opencv)

    文章目录 [双目视差] 立体校正源码分析(opencv) 一.源码解析 二.源码中的方法 [双目视差] 立体校正源码分析(opencv) 一.源码解析 立体校正:把实际中非共面行对准的两幅图像,校正成 ...

  2. [C++提高编程] 3.8 set/ multiset 容器

    文章目录 3.8 set/ multiset 容器 3.8.1 set基本概念 3.8.2 set构造和赋值 3.8.3 set大小和交换 3.8.4 set插入和删除 3.8.5 set查找和统计 ...

  3. OFFICE-利用Word邮件合并功能联动编辑《目标责任成本调整说明》

    正文 00.开始以及目标 0.1 开始 众所周知的原因,X建工的很多文档都提供了一个填写模板,这是个好事.但是捏,当他们把模板放下来要来填数的时候,你会发现所有的数据,都是在不同的文档中搬来搬去,这点 ...

  4. #Powerquery 数据结构基础 一维数据与二维数据

    本文参考了采悟老师的文章,推荐大家看原文,本文为笔记随笔 https://mp.weixin.qq.com/s?__biz=MzA4MzQwMjY4MA==&mid=2484068871&am ...

  5. 使用STM32CubeMX生成ThreadX实时操作系统工程模板

    博客主页:链接.转载请注明出处! 由于需要在stm32上使用USB Host CDC-ECM,连接EC20发送数据到服务器,接触到了ThreadX实时操作系统. 在调研过程中,发现stm32官方USB ...

  6. 2023-03-06:给定一个二维网格 grid ,其中: ‘.‘ 代表一个空房间 ‘#‘ 代表一堵 ‘@‘ 是起点 小写字母代表钥匙 大写字母代表锁 我们从起点开始出发,一次移动是指向四个基本方向之

    2023-03-06:给定一个二维网格 grid ,其中: '.' 代表一个空房间 '#' 代表一堵 '@' 是起点 小写字母代表钥匙 大写字母代表锁 我们从起点开始出发,一次移动是指向四个基本方向之 ...

  7. 2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合。 返回有几个回文子串。 来

    2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合. 返回有几个回文子串 ...

  8. 2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1]。2.arr[n-1] <= arr

    2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1].2.arr ...

  9. 2022-01-03:比如arr = {3,1,2,4}, 下标对应是:0 1 2 3, 你最开始选择一个下标进行操作,一旦最开始确定了是哪个下标,以后都只能在这个下标上进行操作。 比如你选定1下标,

    2022-01-03:比如arr = {3,1,2,4}, 下标对应是:0 1 2 3, 你最开始选择一个下标进行操作,一旦最开始确定了是哪个下标,以后都只能在这个下标上进行操作. 比如你选定1下标, ...

  10. 2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的头节点

    2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的 ...