【Redis | 第二篇】Redis的五种数据类型和相关命令

文章目录

2.Redis的数据类型和相关命令

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

2.1常用数据类型

  1. 字符串(String):最基本的数据类型,可以存储任意二进制数据,以及普通的文本字符串。
  2. 哈希(Hash):包含键值对的无序散列,适合保存对象信息,每个键值对存储了字段和值之间的映射关系。
  3. 列表(List):按照插入顺序排序的字符串元素列表,支持在列表的两端进行插入、删除、获取等操作,可实现栈和队列的功能。
  4. 集合(Set):无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素。
  5. 有序集合(Sorted Set):与集合类似,但每个元素都关联着一个分数(score)用于排序,可以按分数范围或成员值获取元素。

注意:Redis的数据类型,是指**value的数据类型,而Key普遍都是字符串类型**

2.2特性和用途

2.2.1字符串(String)

  • 特点:

    • string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
    • string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
    • string 类型的值最大能存储 512MB
  • 用途:字符串常用于缓存、计数器、分布式锁等场景。可以用于存储简单的键值对数据,或者用作复杂的数据结构的序列化存储。

  • 实战:将字符串用于存储较大的值时,要注意数据大小的限制。合理利用字符串操作函数,如使用 incr 自增计数器,或使用 append 追加字符串值。

  • 举例

    复制代码
    redis 127.0.0.1:6379> SET aaaa "菜鸟教程"
    OK
    redis 127.0.0.1:6379> GET aaaa
    "菜鸟教程"

2.2.2哈希(Hash)

  • 特性:哈希类型是一个键值对的无序散列表,适合存储对象的多个属性。哈希可以嵌套多层,支持单独的字段的读取、更新和删除操作

  • 用途:哈希常用于存储和操作对象的属性,如用户信息、文章信息等。可以减少键名的冗余,提高数据结构的可读性和可维护性

  • 实战:使用哈希可以更好地组织复杂的数据结构,充分利用字段级别的读取和更新操作。可以使用 HSET 和 HMSET 分别设置单个和多个字段的值

  • 举例

    使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value

    复制代码
    redis 127.0.0.1:6379> HMSET aa field1 "Hello" field2 "World"
    "OK"
    redis 127.0.0.1:6379> HGET aa field1
    "Hello"
    redis 127.0.0.1:6379> HGET aa field2
    "World"

2.2.3列表(List)

  • 特性:列表是一个按照插入顺序排序的字符串元素集合,支持在列表的两端(头部为左边,尾部为右边)进行插入、删除和获取元素。元素可以重复,列表的长度可以动态变化。

  • 用途:列表常用于实现消息队列、任务队列、操作日志、聊天消息记录等。可以实现先进先出(FIFO)或后进先出(LIFO)的数据结构。

  • 实战:使用列表操作函数,如 LPUSH、RPUSH、LPOP、RPOP 可以方便地操作列表。在读取大型列表时,要注意时间复杂度和性能问题。

  • 举例:

    复制代码
    redis 127.0.0.1:6379> lpush aa redis
    (integer) 1
    redis 127.0.0.1:6379> lpush aa mongodb
    (integer) 2
    redis 127.0.0.1:6379> lpush aa rabbitmq
    (integer) 3
    redis 127.0.0.1:6379> lrange aa 0 10
    1) "rabbitmq"
    2) "mongodb"
    3) "redis"
    redis 127.0.0.1:6379>

2.2.4集合(Set)

  • 特性:集合是一个无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素等。

  • 用途:集合常用于去重、关注列表、标签、好友列表等场景。由于集合元素是无序的,可以快速进行成员检测和集合操作。

  • 最佳实战:使用集合的交集、并集、差集操作可以方便地进行数据筛选和计算。使用 SADD、SREM 进行成员添加和删除。

  • 举例:

    复制代码
    redis 127.0.0.1:6379> sadd runoob redis
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob mongodb
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabbitmq
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabbitmq
    (integer) 0
    redis 127.0.0.1:6379> smembers runoob
    
    1) "redis"
    2) "rabbitmq"
    3) "mongodb"

2.2.5有序集合(Sorted Set)

  • 特性:有序集合是一个与每个成员关联的浮点数分数(score),可用于对成员进行排序。支持按照分数范围或成员值获取元素。

  • 用途:有序集合常用于排行榜、计分系统、优先级队列等场景。可以按照分数进行排名和排序。

  • 最佳实战:利用有序集合的分数,可以快速进行成员的增删改查操作。使用 ZADD、ZREM 进行成员的添加和删除,使用 ZRANGE 和 ZREVRANGE 进行范围查询。

  • 举例:

    复制代码
    redis 127.0.0.1:6379> zadd runoob 0 redis
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 mongodb
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
    (integer) 0
    redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
    1) "mongodb"
    2) "rabbitmq"
    3) "redis"

2.3小结

类型 简介 特性 场景
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、带权重的消息队列

2.4连接命令

复制代码
#基本语法
#redis-clis

#远程服务连接redis命令
$ redis-cli -h host -p port -a password

2.5字符串---keys命令(重要)

  1. SET key value:设置指定 key 的值为给定的 value。
  2. GET key:获取指定 key 的值。
  3. DEL key:删除指定 key。
  4. INCR key:将指定 key 的值增加1。
  5. DECR key:将指定 key 的值减少1。
  6. APPEND key value:将指定 value 追加到指定 key 的值末尾。
  7. STRLEN key:返回指定 key 值的字符串长度。
  8. SETEX key seconds value:设置指定 key 的值,并设置过期时间(秒)。
  9. SETNX key value:只在指定 key 不存在时,设置 key 的值为给定的 value。
  10. GETSET key value:设置指定 key 的值,并返回旧值。
  11. MSET key1 value1 key2 value2 ...:设置多个 key-value 对。
  12. MGET key1 key2 ...:获取多个 key 的值。
  13. STRLEN key:返回指定 key 值的字符串长度。

2.6哈希---hash命令

  1. HSET key field value:设置哈希类型中指定 key 的 field 域的值为给定的 value。
  2. HGET key field:获取哈希类型中指定 key 的 field 域的值。
  3. HDEL key field1 field2 ...:删除哈希类型中指定 key 的一个或多个 field 域。
  4. HEXISTS key field:检查哈希类型中指定 key 是否存在指定的 field 域。
  5. HGETALL key:获取哈希类型中指定 key 的所有 field 和 value。
  6. HKEYS key:获取哈希类型中指定 key 的所有 field。
  7. HVALS key:获取哈希类型中指定 key 的所有 value。
  8. HINCRBY key field increment:将哈希类型中指定 key 的 field 域的值增加指定的 increment 值。
  9. HMSET key field1 value1 field2 value2 ...:设置哈希类型中指定 key 的多个 field 和 value。
  10. HMGET key field1 field2 ...:获取哈希类型中指定 key 的多个 field 的值。
  11. HLEN key:获取哈希类型中指定 key 的 field 数量。
  12. HSTRLEN key field:获取哈希类型中指定 key 的 field 域的字符串长度。

2.7列表---list命令

  1. LPUSH key value1 [value2 ...]:将一个或多个值插入到列表的左侧(头部)。
  2. RPUSH key value1 [value2 ...]:将一个或多个值插入到列表的右侧(尾部)。
  3. LPOP key:获取并删除列表左侧的第一个元素。
  4. RPOP key:获取并删除列表右侧的第一个元素。
  5. LLEN key:获取列表的长度。
  6. LRANGE key start stop:获取指定范围内的元素,包括 start 和 stop,索引从0开始。
  7. LINDEX key index:获取列表中指定索引位置的元素。
  8. LSET key index value:设置列表中指定索引位置的元素值。
  9. LREM key count value:从列表中删除指定个数的元素。
  10. LTRIM key start stop:修剪(按照索引范围)列表,只保留指定范围内的元素。
  11. RPOPLPUSH source destination:从源列表右侧弹出最后一个元素,并将其插入目标列表的左侧。
  12. BLPOP key1 [key2 ...] timeout:从左侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。
  13. BRPOP key1 [key2 ...] timeout:从右侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。

2.8集合---set命令

  1. SADD key member1 [member2 ...]:向集合中添加一个或多个成员。
  2. SMEMBERS key:获取集合中的所有成员。
  3. SISMEMBER key member:判断指定成员是否存在于集合中。
  4. SCARD key:获取集合中的成员数量。
  5. SREM key member1 [member2 ...]:移除集合中的一个或多个成员。
  6. SRANDMEMBER key [count]:从集合中随机获取一个或多个成员。
  7. SPOP key [count]:随机移除并返回集合中的一个或多个成员。
  8. SMOVE source destination member:将指定成员从一个集合移动到另一个集合。
  9. SUNION key1 [key2 ...]:获取多个集合的并集。
  10. SINTER key1 [key2 ...]:获取多个集合的交集。
  11. SDIFF key1 [key2 ...]:获取多个集合的差集(属于第一个集合,但不属于其他集合)。
  12. SDIFFSTORE destination key1 [key2 ...]:计算多个集合的差集,并将结果存储在指定的目标集合中。

2.9有序集合---Sorted Set命令

  1. ZADD key score1 member1 [score2 member2 ...]:向有序集合中添加一个或多个成员,并指定对应的分数。
  2. ZRANGE key start stop [WITHSCORES]:按照分数从低到高的顺序,获取有序集合中指定范围内的成员。
  3. ZREVRANGE key start stop [WITHSCORES]:按照分数从高到低的顺序,获取有序集合中指定范围内的成员。
  4. ZRANK key member:获取有序集合中指定成员的排名(按照分数从低到高排序)。
  5. ZREVRANK key member:获取有序集合中指定成员的排名(按照分数从高到低排序)。
  6. ZSCORE key member:获取有序集合中指定成员的分数。
  7. ZCOUNT key min max:获取有序集合中分数范围内的成员数量。
  8. ZREM key member1 [member2 ...]:从有序集合中移除一个或多个成员。
  9. ZINCRBY key increment member:将有序集合中指定成员的分数增加指定的增量值。
  10. ZUNIONSTORE destination numkeys key1 [key2 ...] [WEIGHTS weight1 [weight2 ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在指定的目标有序集合中。
  11. ZINTERSTORE destination numkeys key1 [key2 ...] [WEIGHTS weight1 [weight2 ...]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在指定的目标有序集合中。

2.10通用操作

  1. SET key value:设置指定键的值。
  2. GET key:获取指定键的值。
  3. DEL key1 [key2 ...]:删除一个或多个键。
  4. EXISTS key:检查指定键是否存在。
  5. KEYS pattern:查找与指定模式匹配的键集合。
  6. EXPIRE key seconds:设置键的过期时间,单位为秒。
  7. TTL key:获取键的剩余过期时间,单位为秒。
  8. INCR key:将键的值加一。
  9. DECR key:将键的值减一。
  10. INCRBY key increment:将键的值增加指定的增量。
  11. DECRBY key decrement:将键的值减少指定的增量。
  12. APPEND key value:将指定字符串追加到键的值末尾。
  13. HSET key field value:将哈希表中指定字段的值设置为指定值。
  14. HGET key field:获取哈希表中指定字段的值。
  15. HMSET key field1 value1 [field2 value2 ...]:设置哈希表中多个字段的值。
  16. HMGET key field1 [field2 ...]:获取哈希表中多个字段的值。
  17. HGETALL key:获取哈希表中所有字段和值。
  18. RPUSHX key value:将值插入到列表的右侧(尾部),仅当列表存在时。
  19. LPUSHX key value:将值插入到列表的左侧(头部),仅当列表存在时。
  20. PUBLISH channel message:将消息发布到指定的频道。
相关推荐
bbsh209931 分钟前
WebFuture:ASP.NET启动失败报500.30错误
数据库·webfuture
江边垂钓者36 分钟前
macos电脑本地搭建mistral-7b大模型出现4-bit量化和缓存不足问题的记录
macos·缓存·电脑
胆大的1 小时前
SQL 盲注(Blind SQL Injection)
数据库·sql·安全性测试
数据库幼崽2 小时前
MySQL 排查全局锁
数据库·mysql
啃火龙果的兔子2 小时前
华为云二级、多级域名配置
数据库·华为云
isNotNullX3 小时前
kettle好用吗?相较于国产ETL工具有哪些优劣之处?
大数据·数据库·数据仓库·信息可视化·etl
姜豆豆耶3 小时前
Oracle client 静默安装
数据库·oracle·dba
秋意零4 小时前
【排坑指南】MySQL初始化后,Nacos与微服务无法连接??
运维·数据库·mysql·微服务·nacos·报错
麓殇⊙4 小时前
操作系统期末复习--操作系统初识以及进程与线程
java·大数据·数据库
fouryears_234175 小时前
深入理解 MySQL 事务:保障数据操作的原子性与一致性
数据库·mysql