精华内容
下载资源
问答
  • set 什么业务场景 用
    2022-05-10 21:40:35

    set:

    1.成员不能重复

    2.只有键值,没有键名,有点类似数组

    3.可以遍历,方法又add,delete,has

    Map:

    1.本质上是键值对的集合,类似集合;

    2.可以遍历,方法很多,可以干跟各种数据格式转换

    Set和Map主要的应用场景在于数据重组和数据存储

    set 是一种叫做集合的数据结构,Map是一种叫做字典的数据结构

    • Set 和 Map 主要的应用场景在于 数据重组 和 数据储存。
    • Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。

    集合 与 字典 的区别:

    • 共同点:集合、字典 可以储存不重复的值
    • 不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存
    • 集合(Set)
    • // 去重数组的重复对象
      let arr = [1, 2, 3, 2, 1, 1]
      [... new Set(arr)]	// [1, 2, 3]

    操作方法:

    遍历方法:

    Map:

    • add(value):新增,相当于 array里的push。
    • delete(value):存在即删除集合中value。
    • has(value):判断集合中是否存在 value。
    • clear():清空集合。
    • 字典(Map):

      是一组键值对的结构,具有极快的查找速度。

    • const m = new Map()
      const o = {p: 'haha'}
      m.set(o, 'content')
      m.get(o)	// content
      
      m.has(o)	// true
      m.delete(o)	// true
      m.has(o)	// false
    • 操作方法:

    • set(key, value):向字典中添加新元素。
    • get(key):通过键查找特定的数值并返回。
    • Keys():将字典中包含的所有键名以迭代器形式返回。
    • values():将字典中包含的所有数值以迭代器形式返回。
    • entries():返回所有成员的迭代器。
    • forEach():遍历字典的所有成员。
      • has(key):判断字典中是否存在键key。
      • delete(key):通过键 key 从字典中移除对应的数据。
      • clear():将这个字典中的所有元素删除。
      • 总结

        Set:

      • 成员唯一、无序且不重复。
      • [value, value],键值与键名是一致的(或者说只有键值,没有键名)。
      • 可以遍历,方法有:add、delete、has。
    • 本质上是键值对的集合,类似集合。
    • 可以遍历,方法很多可以跟各种数据格式转换。
    更多相关内容
  • Redis set数据类型的常见业务场景

    千次阅读 2020-10-27 13:48:23
    set类型是string类型的集合,其特点是集合元素无序且不重复,每个集合最多可以存储 232- 1 个元素(40多亿),set类型主要有以下应用场景。  1. 好友/关注/粉丝/感兴趣的人集合  set类型唯一的特点使得其适合...

     set类型是string类型的集合,其特点是集合元素无序且不重复,每个集合最多可以存储 232 - 1 个元素(40多亿),set类型主要有以下应用场景。

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

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

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

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

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

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

      需要注意的是,如果你用的是Redis Cluster集群,对于sinter、smove这种操作多个key的命令,要求这两个key必须存储在同一个slot(槽位)中,否则会报出 (error) CROSSSLOT Keys in request don't hash to the same slot 错误。Redis Cluster一共有16384个slot,每个key都是通过哈希算法CRC16(key)获取数值哈希,再模16384来定位slot的。要使得两个key处于同一slot,除了两个key一模一样,还有没有别的方法呢?答案是肯定的,Redis提供了一种Hash Tag的功能,在key中使用{}括起key中的一部分,在进行 CRC16(key) mod 16384 的过程中,只会对{}内的字符串计算,例如friend_set:{123456}和fans_set:{123456},分别表示用户123456的好友集合和粉丝集合,在定位slot时,只对{}内的123456进行计算,所以这两个集合肯定是在同一个slot内的,当用户123456关注某个粉丝时,就可以通过smove命令将这个粉丝从用户123456的粉丝集合移动到好友集合。相比于通过srem命令先将这个粉丝从粉丝集合中删除,再通过sadd命令将这个粉丝加到好友集合,smove命令的优势是它是原子性的,不会出现这个粉丝从粉丝集合中被删除,却没有加到好友集合的情况。然而,对于通过sinter获取共同好友而言,Hash Tag则无能为力,例如,要用sinter去获取用户123456和456789两个用户的共同好友,除非我们将key定义为{friend_set}:123456和{friend_set}:456789,否则不能保证两个key会处于同一个slot,但是如果真这样做的话,所有用户的好友集合都会堆积在同一个slot中,数据分布会严重不均匀,不可取,所以,在实战中使用Redis Cluster时,sinter这个命令其实是不适合作用于两个不同用户对应的集合的(同理其它操作多个key的命令)。

     

      2. 随机展示

      通常,app首页的展示区域有限,但是又不能总是展示固定的内容,一种做法是先确定一批需要展示的内容,再从中随机获取。如下图所示,酷狗音乐K歌擂台赛当日的打擂歌曲共29首,首页随机展示5首;昨日打擂金曲共200首,首页随机展示30首。

      

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

     

      3. 黑名单/白名单

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

      

     

      加入set类型的应用场景后的思维导图如下。

      

     

    展开全文
  • Set和Map的使用场景

    2022-04-03 22:19:30
    Set和Map Set集合是一种无重复元素...Set使用场景 Set和Array的区别是Set里的每一个元素都是唯一的,比如你有一个Array里面有4个元素[1, 2, 3, 1,4],如果你把它转换成Set,就变成[1, 2, 3,4]了。所以我们可以利用Se

    Set和Map

    Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元素,也不太可能逐一访问Set集合中的每个元素,通常的做法是检测给定的值在某个集合中是否存在
    Map集合内含多组键值对,集合中每个元素分别存放着可访问的键名和它对应的值,Map集合经常被用于缓存频繁取用的数据。
    Set的使用场景
    Set和Array的区别是Set里的每一个元素都是唯一的,比如你有一个Array里面有4个元素[1, 2, 3, 1,4],如果你把它转换成Set,就变成[1, 2, 3,4]了。所以我们可以利用Set的这个特性做整数数组的去重。但要注意的是,如果你的数组是[{name: 1}, {name: 1}]这样的包含Object的数组,那么你把它转换为Set时并不能去重,因为虽然这两个对象看起来一样,但在Set看来,这个数组里的两个对象是两个完全不同的值,所以并不符合去重的要求。
    Map的使用场景
    Map类似于对象,是键值对的集合,数据可为任意类型,与Object的区别在于Object的键只能是字符串或者Symbols,但Map可以为任意类型,且Map中的键值是有序的,Map有一个比较特殊的应用场景。如果你在开发时不确定键值对里面的键的名称,那么你需要用Map。举例来说,你需要动态地从MongoDB里获取键值并显示给用户,但也许你并不关心这些键值的键名到底是什么,那么在这种情况下,你可以用Map,例如这样:

    
    var myMap = new Map();
    
    var keyObj = {},
        keyFunc = function () { return 'hey'},
        keyString = "a string";
    
    myMap.set(keyString, "value associated with 'a string'");
    myMap.set(keyObj, "value associated with keyObj");
    myMap.set(keyFunc, "value associated with keyFunc");
    
    console.log(myMap.get(keyFunc));
    
    展开全文
  •  在 set 的基础上给集合中每个元素关联了一个分数,往有序集合中插入数据时会自动根据这个分数排序。它保留了元素不能重复的特性,并且元素是有序的。 2.基本操作 zadd key score member //score是可以重复的,...

    1.简介

      在 set 的基础上给集合中每个元素关联了一个分数,往有序集合中插入数据时会自动根据这个分数排序。它保留了元素不能重复的特性,并且元素是有序的。

    2.基本操作

    zadd key score member  //score是可以重复的,添加key的时候指定分数
    zcard key //计算成员个数
    zscore key member //计算某个成员的分数
    zrank key member //计算成员排名,从低到高
    zrevrank key member //计算成员排名,从高到低
    zrem key member [member...]  //删除成员
    zincrby key increnment member //增加成员的分数
    zrange key start end [withscores]  //从低到高返回指定排名的分数
    zrevrange key start end [withscores]  //从高到低返回
    
    zrangebyscore key min max [withscores] [limit offset count] //按照分数从低到高返回
    zrevrange score  key min max [withscores] [limit offset count] //按照分数从高到低返回成员
    
    withscore 代表返回的时候带上成员的分数
    
    ...还有求交集,并集等操作

    3.应用场景

      在集合类型的场景上加入排序就是有序集合的应用场景了。

    (1)根据好友的“亲密度”排序显示好友列表。

    // 用元素的分数(score)表示与好友的亲密度
    zadd user:kobe 80 james 90 wade  85 melo  90 paul
    
    // 根据“亲密度”给好友排序
    zrevrange user:kobe 0 -1
    
    /**
     * 输出:
     *      1) "wade"
     *      2) "paul"
     *      3) "melo"
     *      4) "james"
     */
     
    // 增加好友的亲密度
    zincrby user:kobe 15 james
    
    // 再次根据“亲密度”给好友排序
    zrevrange user:kobe 0 -1
    
    /**
     * 输出:
     *      1) "james"
     *      2) "wade"
     *      3) "paul"
     *      2) "melo"
     */
     
     //类似的需求还出现在根据文章的阅读量或点赞量对文章列表排序

    (2)排行榜

    实效性

    从排行榜的实效性上划分,主要分为:

    • 实时榜:基于当前一段时间内数据的实时更新,进行排行。例如:当前一小时内游戏热度实时榜,当前一小时内明星送花实时榜等

    • 历史榜:基于历史一段周期内的数据,进行排行。例如:日榜(今天看昨天的),周榜(上一周的),月榜(上个月的),年榜(上一年的)

    业务数据类型

    从需要排行的数据类型上划分,主要分为:

    • 单类型数据排行榜:是指需要排行的主体不需要区分类型,例如,所有用户积分排行,所有公贡献值排行,所有游戏热度排行等

    • 多类型(复合类型)数据排行榜:是指需要排行的主体在排行中要求有类型上的区分,例如:竞技类游戏热度排行、体育类游戏热度排行、MOBA类游戏操作性排行、角色/回合/卡牌三类游戏热度排行等

    展示唯度

    从榜单的最终展示唯度上划分,主要分为:

    • 单唯度:是指选择展示的排行榜就是基于一个唯度下的排行,例如前面提到的MOBA类游戏操作性排行榜,就仅展示所有MOBA类游戏按操作性的评分排行

    • 多唯度:是指选择展示的排行榜还有多种唯度供用户选择,仍然以前面的MOBA类游戏为例,唯度除了操作性,还有音效评分排行,难易度评分排行,画面评分排行等。

    展示数据量

    从需要展示的数据量上划分,主要分为:

    • topN数据:只要求展示topN条排行纪录,例如:最火MOBA游戏top20

    • 全量数据:要求展示所有数据的排行,例如:所有用户的积分排行

     

     

     

    展开全文
  • redis 的 set 类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。 常用命令 ...
  • 目录 前言 redis 数据存储格式 一、string 类型 1、基本介绍 2、string 类型数据的基本操作 ...3、string 类型数据的扩展操作 ...业务场景1 ...业务场景2 ...业务场景3 ...业务场景1 ...业务场景2 ...业务场景...
  • set的拓展操作:用户推荐-业务场景 注意第一个50个是不会变减少的,但是第二个是会减少的。 操作如下: 综上所示,redis应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热点APP等推荐! ...
  • 其实计算属性中还有 get 和 set 方法 举个’栗子’ 下面是页面结构 需求 : 多选框全都选中 >> 全选框 – 选中 其他多选框没有全部选中 >> 全选框 – 不选中 点击 选中 全选框 >> 其他多选框要 –...
  • 文章目录阅读提示CAS原理、ABA问题介绍真实业务场景如何解决ABA问题CAS学习总结 阅读提示 本文将借助开保险柜的业务场景重点阐述误用AtomicBoolean引起的ABA问题,以及解决方案。基于此,请先深入理解CAS原理,以及...
  • 五大数据类型 才基本语法,到应用场景描述 常用Redis-key 语法 expire name 10 #设置key过期时间(过期就null,单位:秒) ttl name #查询当前key剩余时间 exists name #key是否存在 move name #移除当前key ...
  • 五大数据类型——list,set和sorted_setlistlist 类型数据基本操作list 类型数据扩展操作list 类型数据操作注意事项list 类型应用场景setsorted_set list 数据存储需求:存储多个数据,并对数据进入存储空间的顺序...
  • java面试(业务场景

    千次阅读 2020-07-16 23:51:23
    九、OSCache+autocomplete+单例业务场景 在我以前做某项目的过程中,其中我们在做产品列表的查询的时候为了提高用户的体验度,我们使用了autocomplete插件来代替select进行品牌的选择,才开始的时候每次都要根据...
  • redis中的常用业务场景

    千次阅读 2019-05-19 21:12:26
    **Redis**的常用业务场景 1、热点数据的缓存 由于redis访问速度比较快、支持的数据类型比较丰富,所以redis很适合存储热点数据,另外结合expire,我们可以设置过期时间在进行缓存更新操作,这个功能最为常见,...
  • Key的设计注意事项 一般以业务功能模块: 比如购物车key: cart:001,表示1号用户的购物车 简短,明了以主, 节约内存。 简单字符缓存 set key value get key 结构体或对象的存储 a) set user:1 value //...
  • 本文记录乐观锁悲观锁的使用场景以及案例,由MVCC引出乐观锁和悲观锁和一些共享锁、排他锁、当前读、快照读的概念,全面分析乐观锁和悲观锁。
  • 一文搞懂分布式锁及其业务场景

    万次阅读 多人点赞 2019-09-12 09:40:04
    在讨论这个问题之前,我们先来看一个业务场景: 系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。 由于系统有...
  • 3.装饰器的返回值也是⼀个函数的对象,它经常用于有切面需求的场景,实现路由传参,flask的路由传参依赖于装饰器,浏览器通过url访问到装饰器的路由,从而访问视图函数获得返回的HTML页面; 应用场景:1.可以在外层...
  • 知乎@极客小俊,官方首发原创文章前言今天很多小伙伴来问我find_in_set这个函数在MySQL中到底有什么用处 还有与这个函数相关的应用场景会有哪些? 今天我就来给大家讲解一下这个函数从基本的使用到实际应用! 让大家...
  • 介绍了redis set类型,包括详细操作和业务场景等。
  • 策略模式在实际业务场景中的使用及优化 策略模式(Strategy Pattern):定义不同的策略算法,以达到新增算法、移除算法、修改算法的便利性和调用无感知,并且不同的算法区分开之后也更加方便阅读策略算法。(个人...
  • Redis 面试中必考的业务场景解析

    千次阅读 2019-04-23 15:26:13
    Redis 各个知识点在业务场景中的使用方式; Redis 可能遇到的困难以及解决方案(穿透、雪崩等); Redis 分布式环境的使用方案(分布式锁、自增 ID 等); Redis 集群模式总结; Redis 面试题目总结。 ...
  • 那我们在实际场景中到底的哪种隔离级别比较多呢?答案是:提交读! 缘由一:在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多! 缘由二:在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,...
  • redis基础命令 select切换数据库:一共16个库(索引从0开始) dbsize查看当前数据库的key的数量 flushdb:清空当前库 Flushall;通杀全部库 key 相关的命令 ...keys *:查看当前数据库所有的key ...
  • redis的SortSet应用场景

    千次阅读 2017-10-13 15:46:11
    应用场景:论坛的热门帖子[回复数前五] redis默认根据权升序排列集合 name :0 > zadd hot 100 [权--帖子回复数] 1 [值--帖子id] 1 name :0 > zadd hot 200 2 1 name :0 > zadd hot 300 3 1 ...
  • Redis适用的业务场景

    2020-05-31 22:19:41
    Redis基础适用业务场景 总结: 本质:底层使用C语言开发 注意:业务逻辑不要放到redis处理 详细命令参照:这哥们写的不错 hash 购物车: 商家id为key 商品id为field 参与商品数量为value string讲究整体性,适合读...
  • 转账业务场景

    2018-04-18 13:14:00
    A转给B100元 两个关键点: 1 A B sql在一个事务中 ...lined = update set A.money = A.money-100 where A.money >= 100 if(lined == 0) return 没钱; update set B.money = B.money+100 提交事务 ...
  • 常见业务场景 1.秒杀商品的扣库存 2.热点微博点赞数量 二、Hash 简介 常用个性命令 常见业务场景 1.热点明星资料 2.双十一上架的商品属性 三、List 简介 常用个性命令 常见业务场景 1.热点明星的粉丝列表 四、Set ...
  • java集合总结使用场景

    2021-10-06 20:22:51
    集合总结使用场景 在开发中选择什么集合实现类,主要取决于业务操作的特点,然后根据集合实现类特性进行选择: 先判断存储的类型(一组对象(单一)或一组键值对(双列)) 一组对象(单列):Collection 接口 ...
  • 一直都知道计算属性大概是个什么,但是之前项目里的不多,甚至是基本上不到,学习过,但是不去的话始终不会有深刻的印象。 今天用到了,打算好好记录一下,多做笔记,以后找起来也方便 ** 计算属性是通过一...
  • 分析一下这个业务场景, 让method 1 和 method 2 异步执行,然后执行完以后再回到主线程,取到返回结果汇总呗 我们简化下,不获取返回结果 package com.artisan.juc; import java.util.concurrent.*; /** * @author...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,499
精华内容 76,199
关键字:

set 什么业务场景 用