1. redis是一种高级的key:value存储系统,其中value支持五种数据类型:
  2.  
  3. 1.字符串(strings
  4. 2.字符串列表(lists
  5. 3.字符串集合(sets
  6. 4.有序字符串集合(sorted sets
  7. 5.哈希(hashes
  8.  
  9. 而关于key,有几个点要提醒大家:
  10.  
  11. 1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
  12. 2.key也不要太短,太短的话,key的可读性会降低;
  13.  
  14. 另外,我们还可以通过字符串类型进行数值操作:
  15.  
  16. 复制代码代码如下:
  17.  
  18. 127.0.0.1:6379> set mynum "2"
  19. OK
  20. 127.0.0.1:6379> get mynum
  21. "2"
  22. 127.0.0.1:6379> incr mynum
  23. (integer) 3
  24. 127.0.0.1:6379> get mynum
  25. "3"
  26. 看,在遇到数值操作时,redis会将字符串类型转换成数值。
  27.  
  28. 由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redisINCRINCRBYDECRDECRBY等指令来实现原子计数的效果,假如,
  29. 在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么
  30. ,最后mynum的值一定是5。不少网站都利用redis的这个特性来实现业务上的统计计数需求。
  31.  
  32. redis的另一个重要的数据结构叫做lists,翻译成中文叫做“列表”。
  33.  
  34. 首先要明确一点,redis中的lists在底层实现上并不是数组,而是链表,也就是说对于一个具有上百万个元素的lists来说,在头部和尾部插入一个新元素,其时间复杂度是常数级别的,比如用LPUSH10个元素的lists头部插入新元素,和在上千万元素的lists头部插入新元素的速度应该是相同的。
  35.  
  36. 虽然lists有这样的优势,但同样有其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多。
  37.  
  38. lists的常用操作包括LPUSHRPUSHLRANGE等。我们可以用LPUSHlists的左侧插入一个新元素,用RPUSHlists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。我们来看几个例子:
  39.  
  40. 复制代码代码如下:
  41.  
  42. //新建一个list叫做mylist,并在列表头部插入元素"1"
  43. 127.0.0.1:6379> lpush mylist "1"
  44. //返回当前mylist中的元素个数
  45. (integer) 1
  46. //在mylist右侧插入元素"2"
  47. 127.0.0.1:6379> rpush mylist "2"
  48. (integer) 2
  49. //在mylist左侧插入元素"0"
  50. 127.0.0.1:6379> lpush mylist "0"
  51. (integer) 3
  52. //列出mylist中从编号0到编号1的元素
  53. 127.0.0.1:6379> lrange mylist 0 1
  54. 1) "0"
  55. 2) "1"
  56. //列出mylist中从编号0到倒数第一个元素
  57. 127.0.0.1:6379> lrange mylist 0 -1
  58. 1) "0"
  59. 2) "1"
  60. 3) "2"
  61. lists的应用相当广泛,随便举几个例子:
  62.  
  63. 1.我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。
  64. 2.利用LRANGE还可以很方便的实现分页的功能。
  65. 3.在博客系统中,每片博文的评论也可以存入一个单独的list中。
  66.  
  67. redis数据结构 集合】
  68.  
  69. redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
  70.  
  71. 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
  72.  
  73. 复制代码代码如下:
  74.  
  75. //向集合myset中加入一个新元素"one"
  76. 127.0.0.1:6379> sadd myset "one"
  77. (integer) 1
  78. 127.0.0.1:6379> sadd myset "two"
  79. (integer) 1
  80. //列出集合myset中的所有元素
  81. 127.0.0.1:6379> smembers myset
  82. 1) "one"
  83. 2) "two"
  84. //判断元素1是否在集合myset中,返回1表示存在
  85. 127.0.0.1:6379> sismember myset "one"
  86. (integer) 1
  87. //判断元素3是否在集合myset中,返回0表示不存在
  88. 127.0.0.1:6379> sismember myset "three"
  89. (integer) 0
  90. //新建一个新的集合yourset
  91. 127.0.0.1:6379> sadd yourset "1"
  92. (integer) 1
  93. 127.0.0.1:6379> sadd yourset "2"
  94. (integer) 1
  95. 127.0.0.1:6379> smembers yourset
  96. 1) "1"
  97. 2) "2"
  98. //对两个集合求并集
  99. 127.0.0.1:6379> sunion myset yourset
  100. 1) "1"
  101. 2) "one"
  102. 3) "2"
  103. 4) "two"
  104. 对于集合的使用,也有一些常见的方式,比如,QQ有一个社交功能叫做“好友标签”,大家可以给你的好友贴标签,比如“大美女”、“土豪”、“欧巴”等等,这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。
  105.  
  106. redis数据结构 有序集合】
  107.  
  108. redis不但提供了无需集合(sets),还很体贴的提供了有序集合(sorted sets)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。
  109.  
  110. 很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrangezaddzrevrangezrangebyscore等等
  111.  
  112. 老规矩,我们来看几个生动的例子:
  113. //新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1:
  114.  
  115. 复制代码代码如下:
  116.  
  117. 127.0.0.1:6379> zadd myzset 1 baidu.com
  118. (integer) 1
  119. //向myzset中新增一个元素360.com,赋予它的序号是3
  120. 127.0.0.1:6379> zadd myzset 3 360.com
  121. (integer) 1
  122. //向myzset中新增一个元素google.com,赋予它的序号是2
  123. 127.0.0.1:6379> zadd myzset 2 google.com
  124. (integer) 1
  125. //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。
  126. 127.0.0.1:6379> zrange myzset 0 -1 with scores
  127. 1) "baidu.com"
  128. 2) "1"
  129. 3) "google.com"
  130. 4) "2"
  131. 5) "360.com"
  132. 6) "3"
  133. //只列出myzset的元素
  134. 127.0.0.1:6379> zrange myzset 0 -1
  135. 1) "baidu.com"
  136. 2) "google.com"
  137. 3) "360.com"
  138.  
  139. 127.0.0.1:6379> zrange myzset 0 -1 withscores
  140. 1) "souhu"
  141. 2) "2"
  142. 3) "alili"
  143. 4) "3"
  144. 5) "baidu"
  145. 6) "10"
  146. 127.0.0.1:6379> zrange myzset 0 -1 with scores
  147. (error) ERR syntax error
  148. 127.0.0.1:6379> zrange myzset 0 -1 withscores
  149. 1) "souhu"
  150. 2) "2"
  151. 3) "alili"
  152. 4) "3"
  153. 5) "baidu"
  154. 6) "10"
  155.  
  156. redis数据结构 哈希】
  157.  
  158. 最后要给大家介绍的是hashes,即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
  159.  
  160. hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
  161.  
  162. 我们来看一个例子:
  163.  
  164. 复制代码代码如下:
  165.  
  166. //建立哈希,并赋值
  167. 127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34
  168. OK
  169. //列出哈希的内容
  170. 127.0.0.1:6379> HGETALL user:001
  171. 1) "username"
  172. 2) "antirez"
  173. 3) "password"
  174. 4) "P1pp0"
  175. 5) "age"
  176. 6) "34"
  177. //更改哈希中的某一个值
  178. 127.0.0.1:6379> HSET user:001 password 12345
  179. (integer) 0
  180. //再次列出哈希的内容
  181. 127.0.0.1:6379> HGETALL user:001
  182. 1) "username"
  183. 2) "antirez"
  184. 3) "password"
  185. 4) "12345"
  186. 5) "age"
  187. 6) "34"
  188.  
  189. 127.0.0.1:6379> hmset user username imp pwd 1234 age 15
  190. OK
  191. 127.0.0.1:6379> hgetall user
  192. 1) "username"
  193. 2) "imp"
  194. 3) "pwd"
  195. 4) "1234"
  196. 5) "age"
  197. 6) "15"
  198. 127.0.0.1:6379>
  199.  
  200. 创建分支
  201. git brach -b imp
  202. 切换分支
  203. git checkout master
  204. 切换到master分支 合并dev
  205. git merge dev
  206.  
  207. 删除分支
  208. git brach -d imp
  209.  
  210. //由于Direct方式的kafka和Spark Streaming的集成方式中采用的api是低级封装的api(low lever api),此时消费者的offet,由自己保管,不再是zookeeper,
  211. // 同时还可以自己指定从哪个offet开始消费 ,指定消费的topic以及对应每个分区,开始消费的offset
  212. val fromOffsets:Map[TopicAndPartition, Long] = Map(
  213. TopicAndPartition("test1",0) -> 0,
  214. TopicAndPartition("test1",1) -> 100,
  215. TopicAndPartition("test1",2) -> 200,
  216. TopicAndPartition("test1",3) -> 300
  217. )

redis重要知识点的更多相关文章

  1. Redis基础知识点面试手册

    Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...

  2. Redis这些知识点,是必须知道的!

    Redis是一个开源(BSD许可)的内存数据结构存储,可作为数据库,缓存和消息队列.相比Memcached它支持更多的数据结构,如string(字符串),hash(哈希),list(链表),set(集 ...

  3. redis相关知识点

    redis 的相关知识点 启动 启动代码 redis-cli -a 密码 通用命令 expire: 设置有效期 expire name 10 key key * 相关数据类型 String set:添 ...

  4. Redis【知识点】批量删除指定Key

    Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...

  5. Redis的知识点总结~Linux系统操作~

    Redis_启动后杂项基础 Redis一共16个数据库 SELECT[0~15] 来切换数据库 命令起效返回1 不起效返回0 或者nil 或者error 异常... DBSIZE 查询数据的数 KEY ...

  6. redis 相关知识点

    (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...

  7. Redis 入门知识点

    1.Redis简介 1.1.简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redi ...

  8. Redis哨兵知识点总结

    1.Redis哨兵介绍 sentinal,中文名是哨兵 A.哨兵是redis集群架构中非常重要的一个组件,主要功能如下 集群监控,负责监控redis master和slave进程是否正常工作 消息通知 ...

  9. Redis 基础知识点总结

    关系型数据库 VS 非关系型数据库(NoSQL) 关系型数据库 我们过去使用的 mysql.Oracle 都属于关系型数据库.关系型数据库的特点是数据表之间可以存在联系,表内每列数据也存在关联,同时支 ...

随机推荐

  1. 【2019年04月03日】A股最便宜的股票

    太钢不锈(SZ000825) - 当前便宜指数:161.66 - 滚动扣非市盈率PE:4.62 - 滚动市净率PB:1.03 - 动态年化股息收益率:4.53% - 太钢不锈(SZ000825)的历史 ...

  2. vscode切换界面布局

    调整vscode的控制面板位置 鼠标操作 view>Appearance>Toggle Panel Position   调整控制面板在界面底部 或者界面右侧 2.编辑区分布 鼠标操作 v ...

  3. 编译lua动态库

    编译动态库,静态库参考https://blog.csdn.net/yzf279533105/article/details/77586747 centos默认安装了lua5.1,使用rpm删除,yum ...

  4. Elasticsearch学习之图解Elasticsearch中的_source、_all、store和index属性

    转自 : https://blog.csdn.net/napoay/article/details/62233031 1. 概述 Elasticsearch中有几个关键属性容易混淆,很多人搞不清楚_s ...

  5. 【转载】C++中替代sprintf的std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  6. SpringBoot入坑-配置文件使用

    经过上一篇的介绍,相信小伙伴们已经按奈不住内心对springboot的向往,本篇我将继续向小伙伴介绍springboot配置文件的配置,已经全局配置参数如何使用,好了下面开始我们今天的内容介绍. 我们 ...

  7. vim 撤销 回退操作

    在vi中按u可以撤销一次操作 u   撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作 注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了.重做如果你撤销得太多 ...

  8. M - 非诚勿扰 优先队列

    来源 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在准备创建一家专门针对IT人 ...

  9. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  10. 剑指offer——python【第2题】替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”. 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 理解 很容易想到用pytho ...