第六讲:Redis基本数据类型

Redis基本数据类型

redis 作为内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。它的value支持多种类型的数据结构;

基本数据结构包含:

字符串(strings)

散列(hashes)

列表(lists)

集合(sets)

有序集合(sorted sets)

这五种数据结构在我们的工作中经常使用到,面试过程中经常被问到;因此熟练掌握这五种基本数据结构的使用和应用场景是redis的重要部分;

共同好友:通过集合sets来实现;

下单之后的积分排行榜:通过有序集合sorted sets来实现

 

一:字符串(strings)

1.1:类型介绍

字符串是redis 最简单的存储类型,它存储的值可以是字符串,整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作,对整数或者浮点数执行自增或者自减操作;

redis的字符串是一个由字节组成的序列,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间,一般要高于实际字符串长度len;当字符串长度小于1M时,

扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间;需要注意的是字符串最大长度为512M;

1.2:应用场景

缓存层 提高查询性能        比如存储登录用户信息,电商中存储商品信息,

计数器                              也要定时写到数据库中

1.3:数据操作

 

 

 

 也可以 设置自增自减步长 和删除键值对

 

 

 

 

 二:散列(hashes)

2.1:类型介绍

  一个哈希表有多个节点,每个节点保存一个键值对,redis为了高性能,不堵塞服务,所以采用了渐进式rehash策略;

 

2.2:应用场景

  对象存储                     比如存储用户信息,与字符串不一样的是,字符串需要将对象进行序列化(比如json序列化)之后才能保存;而哈希则可以将用户对象 的每个字段单独存储;这样就能节省序列化和反序列化的时间;

  保存用户的购买记录    比如key为用户id,field为商品id;value为商品数量;

  购物车数据的存储        比如key为用户id,field为商品id,value为商品数量;

2.3:操作指令

  

 

   

 

     

 

  

 

   

 

   

  

 

 三:列表(lists)

  3.1:类型介绍

    实现原理是一个双向列表(其底层是一个快速列表),即可以支持反向查找和遍历,插入和删除速度非常快,其时间复杂度为o(1),但是索引定位很慢,时间复杂度为o(n);

    3.2:应用场景

    实现热销榜

       实现工作队列(利用lists的push操作,将任务存在lists中,然后工作线程再用pop操作将任务取出进行执行);

    可以实现最新列表,比如最新评论;

  3.3:操作指令

   

 

    

 

    右边插入

    

 

    

 

    

 

    

 

   

 

  四:集合(sets)

  4.1:类型介绍

   内部实现是一个value值永远为null的HashMap,实际就是通过计算hash的方式来快速重排的,这也是set能提供判断一个成员是否在集合内的原因;

  4.2:应用场景

   redis的sets类型是使用哈希表构造的,因此复杂度是o(1),它支持集合内的增删改查,并且支持多个集合间的交集,并集,差集等操作;可以利用这些集合操作,解决程序开发中很多集合间的问题;

  比如计算网站独立ip,用户画像中的用户标签,共同好友等功能;

  4.3:数据操作

  

 

   

 

     添加数据的时候内部会通过哈希计算自动去重

     

 

      

 

    获取里面的所有数据

  

 

   移除里面的数据    srem nums  2  移除2这个值的数据,而不是第2个

  

 

   

 

 

   随机的移除一个数据

  

 

   移除完数据便不存在了(包括redis的键)

  

 

   

 

 五:有序集合

  5.1:类型介绍 既是一个set 也是一个map set特性是去重,map特性是每一个value都有一个score的属性,这个score属性就是权重;

  5.2:应用场景

    主要应用于根据某个权重进行排序的队列的场景,比如游戏积分排行榜,设置优先级的任务列表,学生成绩表等

  5.3:数据操作

    

 

      

 

     

 

     删除

    

 

     查看还有多少个元素

    

 

     统计某个区间段有多少个元素

    

 

 

     获取某个值所在的位置

    

 

      

 

     

     

posted @ 2022-02-02 22:04  痞子胥  阅读(38)  评论(0)    收藏  举报