电脑语言Redis学习总结 10页

  • 22.78 KB
  • 2021-04-14 发布

电脑语言Redis学习总结

  • 10页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
电脑语言Redis学习总结 ‎    在工作过中运用到了redis的相关知识,在结合多方资料后,加深了对于redis的使用和理解,下面就是电脑语言Redis学习总结,快来看一看吧。          最近在工作中使用到了redis的相关缓存的知识,之前对redis的理解仅仅局限于“缓存数据”、“redis分布式锁”的简单使用,了解的知识面很窄。在结合了多方资料和虚机、java代码进行实操后,加深了对redis的使用和理解。趁热打铁,对学习到的知识做一下总结。       本次学习笔记 将从以下几个方面进行学习总结:       NoSql 简单介绍       * Redis的基本数据类型       一、NoSql 简单介绍       1、NoSql是什么?       NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。       2、能解决什么?       为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。       3、该怎么用? NoSql数据库的4大分类  :      ‎ ‎ KV键值,存储数据库(memcache、Redis的存储类型)--本次学习redis存储数据库文档型数据库(MongoDB)--之后学习       列存储数据库(HBase)--之后学习       图形数据库(Neo4J)--之后学习       4、分布式数据中需要遵循的CAP原理       C:Consistency(强一致性)       A:Availability(可用性)       P:Partition tolerance(分区容错性)       没有NosQL数据库能同时满足这三点       这句话我个人的理解就是,在对于数据的强一直性和数据的分区容错性之间,系统更加倾向于接受“分区容错性”。在分布式数据库中有个3进2的原则,就是一个分布式系统中,最多只能同时满足CA、CP、AP相互使用。       二、Redis的基本数据类型       String:       在项目中最常见的一个使用方式就是,用来缓存用户的信息, 将用户信息的结构体使用JSON序列化成字符串,然后将序列化后的字符串放入reids的缓存中进行存储。从缓存中取用户信息会经过一次反序列化的过程。       当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。 ‎ ‎      参考资料 操作实例       单个键值的存取       > set k1 v1       OK       > get k1       "v1"       > del k1       (integer) 1       > get k1       (nil)       多个键值的存取       > set k2 v2       OK       > mget k1 k2  k3# 返回一个列表       1) "v1"       2) "v2"       3) (nil)       > mset k1 1 k2 2 k3 v3       > mget k1 k2 k3       1) "1"       2) "2"       3) "v3" ‎ ‎      key 值的过期策略       > set k4 v4       > get k4       "v4"       > expire k4 5  # 5s 后过期       ...  # wait for 5s       > get k4       (nil)       List(链表): redis的列表类似java的LinkedList,是链表而不是数据,插入和删除速度很快,O(1),索引定位很慢 O(n)。       Redis的列表结构常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串塞进redis的列表,另一个线程从这个列表中轮询数据进行处理。       当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。       参考资料 操作实例 右进左出(队列)       > rpush nums 1 2 3       (integer) 3       > llen nums       (integer) 3       > lpop nums ‎ ‎      "1"       > lpop nums       "2"       > lpop nums       "3"       > lpop nums       (nil)       右进右出(栈)       > rpush nums 4 5 6       (integer) 3       > rpop nums       "6"       > rpop nums       "5"       > rpop nums       "4"       > rpop nums       (nil)       Hash:       相当于hashmap,hash结构也可以存储用户的信息,可以对用户结构中的每个字段单独存储, 这样当我们需要获取用户信息时可以进行部分获取。 ‎ ‎         参考资料 操作实例       > hset books java "think in java"  # 命令行的字符串如果包含空格,要用引号括起来(integer) 1       > hset books golang "concurrency in go"       (integer) 1       > hset books python "python cookbook"       (integer) 1       > hgetall books  # entries(),key 和 value 间隔出现1) "java"       2) "think in java"       3) "golang"       4) "concurrency in go"       5) "python"       6) "python cookbook"       > hlen books       (integer) 3       > hget books java       "think in java"       > hset books golang "learning go programming"  # 因为是更新操作,所以返回 0(integer) 0       > hget books golang ‎ ‎      "learning go programming"       > hmset books java "effective java" python "learning python" golang "modern golang programming"  # 批量 setOK       Set:       相当于Hashset,内部的键值对是无序的惟一的,set结构可以存储活动中中奖的用户ID,因为有去重的功能,可以保证同一个用户不会中奖两次。       参考资料 操作实例       > sadd books python       (integer) 1       > sadd books python  #  重复       (integer) 0       > sadd books java golang       (integer) 2       > smembers books  # 注意顺序,和插入的并不一致,因为 set 是无序的1) "java"       2) "python"       3) "golang"       > sismember books java  # 查询某个 value 是否存在,相当于 contains(o)(integer) 1       > sismember books rust ‎ ‎      (integer) 0       > scard books  # 获取长度相当于 count()       (integer) 3       > spop books  # 弹出一个       "java"       zset:       类似于SortedSet和HashMap的结合体,set既可以保证value的唯一性,另一方面可以给每个value 赋予一个值,代表着排序权重 zset 可以用来存储粉丝列表,value值是粉丝的用户ID,score是关注时间,对粉丝类表按照关注时间进行排序 参考资料 操作实例> zadd books "think in java"       (integer) 1       > zadd books "java concurrency"       (integer) 1       > zadd books "java cookbook"       (integer) 1       > zrange books 0 -1  # 按 score 排序列出,参数区间为排名范围1) "java cookbook"       2) "java concurrency"       3) "think in java"       > zrevrange books 0 -1  # 按 score ‎ 逆序列出,参数区间为排名范围1) "think in java"       2) "java concurrency"       3) "java cookbook"       > zcard books  # 相当于 count()       (integer) 3       > zscore books "java concurrency"  # 获取指定 value 的 score""  # 内部 score 使用 double 类型进行存储,所以存在小数点精度问题> zrank books "java concurrency"  # 排名       (integer) 1       > zrangebyscore books 0   # 根据分值区间遍历 zset1) "java cookbook"       2) "java concurrency"       > zrangebyscore books -inf withscores # 根据分值区间 (-∞, ] 遍历 zset,同时返回分值。inf 代表 infinite,无穷大的意思。       1) "java cookbook"       2) ""       3) "java concurrency"       4) ""       > zrem books "java concurrency"  # 删除 value(integer) 1 ‎ ‎      > zrange books 0 -1       1) "java cookbook" ‎