redis数据类型及常用数据操作

流楚丶格念 2021-07-20 04:19:37
redis


1 官方文档(大全) 2 String—字符串

String数据结构是简单的 key-value 类型,value不仅可以是String,也可以是数字。String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片或者序列化的对象。从内部实现来看其实String可以看作byte数组,最大上限是1G字节。

下面是String类型的定义:
struct sdshdr
{
long len;
long free;
char buf[];
};

  • len是buf数组的长度
  • free是数组中剩余可用字节数
  • buf是个char数组用于存贮实际的字符串内容

常用操作:

set key value 设置key对应的值为string类型的value
get key 获取key对应的value值,如果key不存在返回nil
KEYS pattern 查找所有符合给定模式pattern(正则表达式)的 key
EXISTS key 返回key是否存在,如果存在返回1,不存在返回0
DEL key 删除一个key值
TYPE key 返回key所存储的value的数据结构类型,它可以返回string, list, set, zset 和 hash等不同的类型。
SETNX key value 将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。nx是not exist的意思。
SETEX key seconds value 设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。
SETRANGE key offset value 覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。
INCR key 对存储在指定key的数值执行原子的加1操作。
DECR key 对key对应的数字做减1操作。
MSET key value 对存对应给定的keys到他们相应的values上。
MGET key[key ...] 返回所有指定的key的value。

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
3 Hash—字典

redis哈希是键值对的集合,它是是字符串字段和字符串值之间的映射,所以它们用来表示对象。

常用操作:

HSET key field value 设置 key 指定的哈希集中指定字段的值。
HGET key field 返回 key 指定的哈希集中该字段所关联的值。
HKEYS key 返回 key 指定的哈希集中所有字段的名字。
HDEL key field [field ...] 从 key 指定的哈希集中移除指定的域。
HLEN key 返回 key 指定的哈希集包含的字段的数量。
HMSET key field value [field value ...] 设置 key 指定的哈希集中指定字段的值。
HMGET key field [field ...] 返回 key 指定的哈希集中指定字段的值。
HGETALL key 返回 key 指定的哈希集中所有的字段和值。

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
4 List—列表

List说白了就是链表(双端链表)。使用List结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的TimeLine )。List 的另一个应用就是消息队列,可以利用List的 PUSH操作,将任务存在List中,然后工作线程再用POP操作将任务取出进行执行。

常用操作:

LPUSH key value [value ...] 将所有指定的值插入到存于 key 的列表的头部。
LPOP key 移除并且返回 key 对应的 list 的第一个元素。
LRANGE key start stop 返回存储在 key 的列表里指定范围内的元素。
LTRIM key start stop 修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。

  • 1.
  • 2.
  • 3.
  • 4.
5 Set—无序集合

Set是字符串的无序集合,集合指一堆不重复值的组合。利用 Redis提供的Set数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

常用操作:

SADD key member [member ...] 添加一个或多个指定的member元素到集合的 key中。
SMEMBERS key 返回key集合所有的元素。
SREM key member [member ...] 在key集合中移除指定的元素。
SINTER key [key ...] 返回指定所有的集合的成员的交集。
SUNIONSTORE destination key [key ...] 返回给定的多个集合的并集中的所有成员,而是将结果存储在destination集合中。

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}

6 Sorted Set—有序集合

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务,让重要的任务优先执行。

常用操作:

ZADD key score member [score member ...] 将所有指定成员添加到键为key有序集合(sorted set)里面。 添加时可以指定多个分数/成员(score/member)对。
ZRANGE key start stop [WITHSCORES] 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从小到大)来排列。
ZREVRANGE key start stop [WITHSCORES] 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。

  • 1.
  • 2.
  • 3.
7 Pub/Sub—订阅/发布

Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe)。发件人(在 Redis 中的术语称为发布者)发送邮件,而接收器(订户)接收它们。信息传输的链路称为通道。Redis 一个客户端可以订阅任意数量的通道。

在 Redis 中,你可以设定对某一个key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天、群聊等功能。

常用操作:

SUBSCRIBE channel [channel ...] 订阅给指定频道的信息。一旦客户端进入订阅状态,客户端就只可接受订阅相关的命令。
PUBLISH channel message 将信息 message 发送到指定的频道 channel。

  • 1.
  • 2.

启动一个客户端发布一个主题:

再启动一个客户端,只要有发布以“mike”主题的消息,上面客户端都能收到:

8 Transactions—事务

redis事务允许一组命令在单一步骤中执行。事务有两个属性:

  • 在一个事务中的所有命令作为单个独立的操作顺序执行。在Redis事务中的执行过程中而另一客户机发出的请求,这是不可以的。
  • redis事务是原子的。原子意味着要么所有的命令都执行,要么都不执行。

redis 事务由指令 MULTI 发起的,之后传递需要在事务中和整个事务中,最后由 EXEC 命令执行所有命令的列表。


MULTI 标记一个事务块的开始。 随后的指令将在执行EXEC时作为一个原子执行。
EXEC 执行事务中所有在排队等待的指令并将链接状态恢复到正常。

  • 1.
  • 2.
  • 3.
汇总图

在这里插入图片描述

版权声明
本文为[流楚丶格念]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15265965/2894328

  1. Netty源码解析-概述篇
  2. Netty源码解析-概述篇
  3. Netty源码解析1-Buffer
  4. Netty源码解析1-Buffer
  5. Netty源码解析2-Reactor
  6. Netty源码解析2-Reactor
  7. Netty源码解析3-Pipeline
  8. Netty源码解析3-Pipeline
  9. Netty源码解析4-Handler综述
  10. Netty源码解析4-Handler综述
  11. Netty源码解析5-ChannelHandler
  12. Netty源码解析5-ChannelHandler
  13. Netty源码解析6-ChannelHandler实例之LoggingHandler
  14. Netty源码解析6-ChannelHandler实例之LoggingHandler
  15. Netty源码解析7-ChannelHandler实例之TimeoutHandler
  16. Netty源码解析7-ChannelHandler实例之TimeoutHandler
  17. Netty源码解析8-ChannelHandler实例之CodecHandler
  18. Netty源码解析8-ChannelHandler实例之CodecHandler
  19. Netty源码解析9-ChannelHandler实例之MessageToByteEncoder
  20. Netty源码解析9-ChannelHandler实例之MessageToByteEncoder
  21. 大数据面试题之Hbase系列
  22. 你可能需要的Kafka面试题与答案整理
  23. 你可能需要的Kafka面试题与答案整理
  24. 后起之秀Pulsar VS. 传统强者Kafka?谁更强
  25. 后起之秀Pulsar VS. 传统强者Kafka?谁更强
  26. 【大数据哔哔集20210123】别问,问就是Kafka最可靠
  27. 【大数据哔哔集20210123】别问,问就是Kafka最可靠
  28. 【大数据哔哔集20210124】有人问我Kafka Leader选举?我真没慌
  29. 【大数据哔哔集20210124】有人问我Kafka Leader选举?我真没慌
  30. 【大数据哔哔集20210117】Kafka 的高可靠性是怎么实现的
  31. 【大数据哔哔集20210117】Kafka 的高可靠性是怎么实现的
  32. Kafka Connect | 无缝结合Kafka构建高效ETL方案
  33. Kafka面试题总结(一)
  34. Kafka面试题总结(一)
  35. Kafka面试题整理(二)
  36. Kafka面试题整理(二)
  37. 基于Kafka Flink Redis的电商大屏实时计算案例
  38. 基于Kafka Flink Redis的电商大屏实时计算案例
  39. Google布隆过滤器与Redis布隆过滤器详解
  40. Google布隆过滤器与Redis布隆过滤器详解
  41. 【Java Web前端开发】前端框架 bootstrap+jquery+angularjs探索
  42. 关于Redis的几件小事 | 高并发和高可用
  43. 关于Redis的几件小事 | 高并发和高可用
  44. 关于redis的几件小事(一)redis的使用目的与问题
  45. 关于redis的几件小事(一)redis的使用目的与问题
  46. 阿里云Redis技术架构演进
  47. 阿里云Redis技术架构演进
  48. 阿里云Redis技术架构演进
  49. Flink实战(109):connector(十八)hdfs 读写(三)StreamingFileSink相关特性及代码实战
  50. Flink实战(110):flink-sql使用(十八)connector(十九)Flink 与 hive 结合使用(七) Flink Hive Connector 使用
  51. Flink实战(110):flink-sql使用(十八)connector(十九)Flink 与 hive 结合使用(七) Flink Hive Connector 使用
  52. Flink实战(111):flink-sql使用(十九)Flink 与 hive 结合使用(八)Hive Streaming 实战解析
  53. Flink实战(111):flink-sql使用(十九)Flink 与 hive 结合使用(八)Hive Streaming 实战解析
  54. Docker常用命令,这些都要会!
  55. 鸟哥的Linux私房菜学习之第九章笔记
  56. Java NIO之Channel(通道)
  57. Java NIO之拥抱Path和Files
  58. Redis changed its open source license, and many projects were no longer open source
  59. JDK 11 has entered the candidate release stage, and the official version is planned to be released on September 25
  60. [* *] the latest version of windows 10 hides Linux?