目录​​​​​​​

字符串(String)

类型介绍

应用场景

操作指令

散列(hashes)

类型介绍

应用场景

操作指令

列表(list)

类型介绍

应用场景

操作指令

集合(sets)

类型介绍

应用场景

操作指令

有序集合(sorted set)

类型介绍

应用场景

操作指令


字符串(String)

类型介绍

  • 字符串是Redis最简单的储存类型,可以存储字符串、整数、浮点数
  • 可以对整个字符串或者字符串中的一部分进行操作
  • 可以对整数或者浮点数进行自增或者自减操作
  • Redis的字符串是一个由字节组成的序列,跟Java里的ArrayList有点类似,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间,一般要高于实际字符串长度。
  • 当字符串长度小于1M时,扩容都是加倍现有的空间;如果超过1M,扩容时一次只会多扩1M的空间。(字符串最大长度为512M)

应用场景

  • 主要运用于数据缓存,存储热点数据,提高查询性能。例如,存储登录用户信息、商品详情信息
  • 计数器。例如,页面的播放量,一个IP被访问了多少次。(Redis是单线程架构,可以保证数据的正确性)

操作指令

redis字符串操作指令
序号 命令 描述
1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value 只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key 返回 key 所储存的字符串值的长度。
12 MSET key value [key value ...] 同时设置一个或多个 key-value 对。
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key 将 key 中储存的数字值增一。
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key 将 key 中储存的数字值减一。
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

散列(hashes)

类型介绍

  • 散列相当于Java中的HashMap,内部时无序字典。实现原理与HashMap一致。一个哈希表有多个节点,每个节点保存一个键值对。
  • 与Java中的HashMap不同的时,rehash的方式不一样,因为Java的HashMap在字典很大时,rehash是个耗时的操作,需要一次性rehash。Redis为了提高性能,不能堵塞服务,采用了渐进式rehash策略。
  • 渐进式rehash会在rehash的同时,保留新旧两个hash结构,查询时会同时查询两个hash结构,然后在后续的定时任务中以及hash操作指令中,循序渐进地将旧hash的内容一点点迁移到新的hash结构中。当迁移完成后,就会使用新的hash结构取而代之。
  • 当hash移除掉最后一个元素后,该数据结构自动被删除,内存被回收。

应用场景

  • 可以用于对象存储。例如,存储用户信息。
  • 字符串也可以存储对象信息,但是需要将对象进行序列化(比如json序列化)之后才能报讯,而Hash则可以将用户对象的每个字段单独存储,这样就能节省序列化和反序列化的时间

操作指令

redis哈希操作指令
序号 命令及描述 描述
1 HDEL key field1 [field2] 删除一个或多个哈希表字段
2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 获取存储在哈希表中指定字段的值。
4 HGETALL key 获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key 获取所有哈希表中的字段
8 HLEN key 获取哈希表中字段的数量
9 HMGET key field1 [field2] 获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key 获取哈希表中所有值。
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

列表(list)

类型介绍

  • list相当于Java中的LinkedList,实现原理是一个双向链表(其实底层是一个快速列表),即可以支持反向查找和便利,方便操作。插入和删除操作更快,时间复杂度为O(1),但是索引定位比较慢,时间复杂度为O(n)。

应用场景

  • 消息队列。(已经存在成熟的Kafka、RabbitMQ等消息队列技术,所以不推荐使用)
    list类型的lpop和rpush(或者lpush和rpop)能实现队列的功能,所以可以使用Redis的list类型实现简单的点对点消息队列。
  • 排行榜。
    list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中。只有定时计算的排行榜才适合存储在list中
  • 最新列表
    list类型的lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表,如朋友圈的点赞列表、评论列表。
  • 实时列表推荐使用sorted set

操作指令

redis列表操作指令
序号 命令及描述 描述
1 BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 LINDEX key index 通过索引获取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
6 LLEN key 获取列表长度
7 LPOP key 移出并获取列表的第一个元素
8 LPUSH key value1 [value2] 将一个或多个值插入到列表头部
9 LPUSHX key value 将一个值插入到已存在的列表头部
10 LRANGE key start stop 获取列表指定范围内的元素
11 LREM key count value 移除列表元素
12 LSET key index value 通过索引设置列表元素的值
13 LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 RPOP key 移除列表的最后一个元素,返回值为移除的元素。
15 RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16 RPUSH key value1 [value2] 在列表中添加一个或多个值
17 RPUSHX key value 为已存在的列表添加值

集合(sets)

类型介绍

  • 集合类似于Java中的HashSet,内部实现是一个value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供一个成员是否在集合内的原因。

应用场景

  • 好友/关注/粉丝/感兴趣的人集合

    set类型唯一的特点使得其适合用于存储好友/关注/粉丝/感兴趣的人集合,集合中的元素数量可能很多,每次全部取出来成本不小,set类型提供了一些很实用的命令用于直接操作这些集合,如

        a. sinter命令可以获得A和B两个用户的共同好友

            b. sismember命令可以判断A是否是B的好友

      c. scard命令可以获取好友数量

      c. 关注时,smove命令可以将B从A的粉丝集合转移到A的好友集合

  • 随机展示
    set类型适合存放所有需要展示的内容,而srandmember命令则可以从中随机获取几个。

  • 黑名单/白名单
    经常有业务出于安全性方面的考虑,需要设置用户黑名单、ip黑名单、设备黑名单等,set类型适合存储这些黑名单数据,sismember命令可用于判断用户、ip、设备是否处于黑名单之中。

操作指令

redis集合操作指令
序号 命令及描述 描述
1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SCARD key 获取集合的成员数
3 SDIFF key1 [key2] 返回第一个集合与其他集合之间的差异。
4 SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2] 返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
8 SMEMBERS key 返回集合中的所有成员
9 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
10 SPOP key 移除并返回集合中的一个随机元素
11 SRANDMEMBER key [count] 返回集合中一个或多个随机数
12 SREM key member1 [member2] 移除集合中一个或多个成员
13 SUNION key1 [key2] 返回所有给定集合的并集
14 SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

有序集合(sorted set)

类型介绍

  • 有序集合是Redis类似于SortedSet和HashMap的结合体,一方面它是一个set,保证了内部value的唯一性,另一方面它可以给每个value赋予一个score,代表整个value的排序权重。
  • 内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序。HashMap里存放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里村的score,使用跳跃表的结构可以获得比较搞的查找效率,并且在实现上比较简单。
  • scorted sets中最后一个value被移除后,数据结构自动删除,内存被回收。

应用场景

  • 排行榜:有序集合经典使用场景。
    例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。
  • 用Sorted Sets来做带权重的队列
    比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

操作指令

redis有序集合操作指令
序号 命令及描述 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序集合的成员数
3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中
6 ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
10 ZRANK key member 返回有序集合中指定成员的索引
11 ZREM key member [member ...] 移除有序集合中的一个或多个成员
12 ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
13 ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
14 ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17 ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18 ZSCORE key member 返回有序集中,成员的分数值
19 ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

Redis基本数据类型、应用场景、操作指令相关推荐

  1. redis常用数据类型的场景,你真的用对了么?

    关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. redis常用数据类型的场景,你真的用对了么? redis常用数 ...

  2. Redis学习总结(15)——Redis 基本数据类型使用场景

    一.String Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.常用命令:  set,get,decr,incr,mget 等. 应用场景:S ...

  3. redis五大数据类型使用场景

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Redis是一种基于键值对的NoSQL数据库,它的值主要由 ...

  4. SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例

    场景 SpringDataRedis环境搭建(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/104989029 ...

  5. Redis常见数据类型_Redis通用指令

    Redis常见数据类型 redis本身就是一个Map结构, 所有数据都采用key:value的形式, redis中的数据类型指的是value的类型, key部分永远是字符串 string(类似Java ...

  6. redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展...

    21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键 ...

  7. 【Redis】数据类型的详解与使用场景【原创】

    文章目录 Redis数据类型的详解与使用场景 1-1 NoSQL的概述 1. 概述 2. 为什么需要NoSQL 3. NoSQL产品 4. 分类 5. 特点 2-1 Redis的概述 1. 概述 2. ...

  8. Redis的数据类型以及每种数据类型的使用场景

    人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题往往被人忽略,Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基 ...

  9. Redis数据类型使用场景及有序集合SortedSet底层实现详解

    Redis常用数据类型有字符串String.字典dict.列表List.集合Set.有序集合SortedSet,本文将简单介绍各数据类型及其使用场景,并重点剖析有序集合SortedSet的实现. Li ...

最新文章

  1. Java swing是什么?有什么作用?
  2. 「创式纪」人工智能应用创新大赛启动,首次结合商业计划和机器学习
  3. XamarinAndroid组件教程RecylerView动画组件使用动画(3)
  4. hdu 5285 二分图黑白染色
  5. 在Android中实现监听 返回键,主键,菜单键
  6. 关于Android Force Close 出现的原因 以及解决方法
  7. windows系统采用了那种访问控制模型_Linux-3.2 系统与硬件(下)(连载)
  8. mysql8允许外网访问(转载+整理)
  9. 添加图标_win10系统轻松添加显示桌面图标的操作方法
  10. 利用Seafile搭建私有文件同步云盘
  11. 软考网络管理员学习笔记3之第三章网络体系结构
  12. Unity3D常用知识点总结
  13. 数字孪生|数字孪生装备-概念与内涵
  14. python解密密文_ctf密码学------密文解码python脚本(凯撒解密)
  15. C/C++和Lua混合编程
  16. 【贪心算法】Wooden Sticks(资源调度问题)
  17. html代码的魔方加密,浅析三维魔方加密算法
  18. bcma错误linux,linux – Broadcom Corporation BCM4313 WLAN无法在已...
  19. Android 之集成GMS 包
  20. 02. Excel_数据处理_基本操作(2)

热门文章

  1. 在Ubuntu搭建网站环境问题记录
  2. 2015.7.9(1000股涨停,未按分段交易中国重工、中国软件减仓失误!补做大智慧、中色股份追高,而后控制仓位预防高开跳水——重新整理分段交易原则)发现中软吸筹率极高...
  3. SharePoint 2010中增强的错误跟踪机制
  4. ASP.NET DROPDOWNLIST无刷新联动(中文URL参数处理)
  5. 基于Python-turtle库绘制小猪佩奇、小猫咪
  6. 客户端(https)与服务器交互过程
  7. Linux ALSA音频子系统二
  8. 上海传音控股驱动开发笔试题
  9. Clojure 学习入门(11)- 宏 macro
  10. C语言:运行中获取宏名字的技巧