首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis除了做缓存,还能做什么???

每一条朋友圈动态会对应一个唯一的标识(比如动态的 ID),以这个标识为基础构建一个特定的键(key),例如post:{post_id}:likes(这里post_id是具体朋友圈动态的编号),而这个键对应的值...(value)就是点赞的数量,以字符串形式存储的数字。...例如,刚开始一条动态的点赞数是 0,对应的 Redis 键值对可能是"post:12345:likes" : "0",当有用户点赞时,执行INCR命令后就变为"post:12345:likes" : "...集合(Set)类型(可选,用于记录点赞用户等拓展功能): 除了记录点赞数量,还可以使用集合类型来记录哪些用户对该动态进行了点赞。...同样以动态的 ID 构建一个集合的键,如post:{post_id}:liked_users,将点赞用户的唯一标识(比如用户 ID)添加到这个集合中。

13410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    快手面试,体验极佳!!

    HashTable:数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的 TreeMap:红黑树(自平衡的排序二叉树) ConcurrentHashMap:Node数组...MySQL 8.0 已删除该模块; 解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型; 执行 SQL:执行 SQL 共有三个阶段:...优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划; 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端; 词法解析器说说 解析器会做如下两件事情。...根据词法分析的结果,语法解析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法,如果没问题就会构建出 SQL 语法树,这样方便后面模块获取 SQL 类型、表名、字段名、 where...,B+ 树为了维护索引有序性,都需要进行动态维护。

    27710

    MongoDB权威指南学习笔记(1)--基础知识与对文档的增删改查

    键不能含有\0(空字符) .和$具有特殊含义,只能在特定环境下使用 集合 集合就是一组文档,一个集合就相当于关系数据库的一张表 动态模式 集合时动态模式的,就是说集合里面的文档可以时各式各样的。...) 增加、修改、删除键时,应该使用$修改器 增加减少操作 $inc修改器:用来增加已有键的值,如果该键不存在那就创建一个。...,如果数组的元素数量小鱼10(push之后),那么所有元素都会被保留,如果数组的元素大于10,那么只有最后10个元素会被保留。...文档中的标量(非数组元素)必须与查询条件中的每一条语句相匹配 使用elemMatch要求使用查询条件中的两个语句与一个数组元素进行比较,elemMatch不会匹配非数组元素 db.test.find(...可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者执行一些强大的操作。

    5.6K10

    动态SQL!牛逼!

    “开发人员在使用JDBC或其他类似的框架进行数据库开发时,通常都要根据需求去手动拼装SQL,这是一个非常麻烦且痛苦的工作,而MyBatis提供的对SQL语句动态组装的功能,恰能很好的解决这一麻烦工作。..., '%') 可以看出上面SQL语句明显存在SQL语法错误,而加入了条件“1=1”后,既保证了where后面的条件成立,又避免了where后面第一个词是and或者or之类的关键词。...一条一条的查询 :那如果要查询1000条数据呢,岂不是很累? 在Java中用for循环查询 :考虑过N条查询语句时的查询效率了吗?...collection:配置的list是传递过来的参数类型(首字母小写),它可以是一个array、list(或collection)、Map集合的键、POJO包装类中数组或集合类型的属性名等。...如果传入的参数是POJO包装类的时候,collection属性值就为该包装类中需要进行遍历的数组或集合的属性名。 7. 元素 在入门案例中模糊查询的SQL语句中?

    55520

    Java 关于集合框架那点事儿

    1.引入集合框架   采用数组存在的一些缺陷:    1.数组长度固定不变,不能很好地适应元素数量动态变化的情况。   ...如果试图添加重复        的键,那么最后加入的"键-值对"将替换掉原先的"键-值       队"  Object get(Object key)    根据键返回相关联的值,若不存在指定的键,则返回...isEmpty()    若不存在键-值映射关系,则返回true  void clear()     从此映射中移除所有映射关系 应用: 1.Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作...第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。...这是由于集合以object形式来存储它们的元素。 二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 三:数组是一种可读/可写数据结构没有办法创建一个只读数组。

    1.2K100

    Java程序员2018阿里最新面试题,想进阿里的必看(含答案解析)

    4、HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。...5、TreeMap能够把它保存的记录根据键排序,默认是按升序排序。 详见:链接 小编注:为什么没有第四题不要问我...学姐没写 5、Tomcat,Apache,JBoss的区别?...5、ActionServlet根据ActionMapping实例包含的映射信息决定请求转发给哪个Action,如果相应的Action实例不存在,就先创建一个实例,然后调用Action的execute()...游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,我们应该只有在没有其他方法的情况下才使用游标。...只要我们在查询语句中没有强制指定索引,索引的选择和使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们在写SQL语句的时候尽量使得优化器可以使用索引

    1.2K00

    Go 基础面试题

    这两种方式都可以在运行时检查一个变量的类型,并根据检查结果执行不同的代码逻辑。 7. Go 两个接口之间可以存在什么关系?...新的数组容量通常是按照旧容量的 2 倍或增加一定比例来扩展的,而长度会根据添加的元素数量增加。...Go 的map使用了链地址法来处理哈希碰撞:在发生冲突时,新的键值对会被添加到同一哈希桶的链表中。 动态扩容: Go 的map会根据元素的数量动态改变大小。...Go map 如何扩容 在 Go 语言中,map是一个高效关键的数据结构,它是无序的键值对集合。Go 的map数据结构会根据元素的数量动态调整大小,即进行扩容以维持操作的效率。...这个哈希值之后会被用于确定键值对在map中的位置。 确定同位置:根据计算出的哈希值,通过一定的偏移量计算找到这个键可能位于的“桶”。

    29110

    MongoDB是什么?看完你就知道了!

    已存在数据:{ _id : 1, " name " : " n1 " },再次进行插入操作时,insert({ " name " : " n2 " }) 插入的数据因为没有主键,所以会增加一条数据,save...而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结操作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新操作。...一对多的关系 :在“多”的集合关系中添加id指向依赖的id。 多对多 :在其中一种对应关系中使用对象数组指向另外一个对象。...(2)分片的核心操作 分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置 块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片...分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。 当创建分片时,会根据分片键创建一个索引。

    1.2K20

    MongoDB是什么?看完你就知道了!

    已存在数据:{ _id : 1, " name " : " n1 " },再次进行插入操作时,insert({ " name " : " n2 " }) 插入的数据因为没有主键,所以会增加一条数据,save...而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结操作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新操作。...一对多的关系 :在“多”的集合关系中添加id指向依赖的id。 多对多 :在其中一种对应关系中使用对象数组指向另外一个对象。...(2)分片的核心操作 分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置 块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片...分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。 当创建分片时,会根据分片键创建一个索引。

    83430

    整个SQL语句的执行效率都靠它了...

    Single Row by Hash Cluster Key with Unique or Primary Key:根据哈希聚簇键,返回一条记录。...这种规则发生在SQL语句的WHERE部分所包含的过滤条件中,字段是一个哈希聚簇键且这个字段为唯一或主键索引字段。...Single Row by Unique or Primary Key:根据主键或唯一索引键值,返回一条记录。这种规则发生在SQL语句中WHERE部分,为唯一或主键所有字段的等值连接条件。...Indexed Cluster Key:根据一个索引的聚簇键字段,返回一组记录。 Composite Index:根据一个组合索引字段,返回一组记录。...但如果各列之间有某种关系,则估算的结果与实际结果之间往往存在较大误差。可以通过动态采样或者多列统计信息的方法解决部分问题,但都不是完美的解决方案。

    92720

    约到 B 站一面,什么水平?

    Java集合 HashMap的实现原理 从 JDK 1.7 和 JDK 1.8 版本区别回答: 在 JDK 1.7 版本之前, HashMap 数据结构是数组和链表,HashMap通过哈希算法将元素的键...如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,效率就很低了。...List接口的常见实现类包括ArrayList、LinkedList和Vector。 ArrayList:基于数组实现的动态数组,支持随机访问和快速插入、删除操作。适合需要频繁访问元素的场景。...在任何一个确定的时刻,一个处理器(对于多内核来说是一个内核)都只会执行一条线程中的指令。...最后 JVM 对类进行初始化,包括: 1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类; 2)如果类中存在初始化语句, 就依次执行这些初始化语句。

    17710

    java中级考试 考点_java中级面试题的考点「建议收藏」

    (2)Map的主要作用是用于存储键(key)值(value)对,根据键得到值,因此不允许键重复,但允许值重复。...(3)HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有最快的访问速度。...HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。...7.数据库连接池是什么意思 像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。...8.HashMap的底层实现 首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash

    60120

    JavaScript高级程序设计-性能整理(一)

    要想让预加载器知道这些 动态请求文件的存在,可以在文档头部显式声明它们: 3.1.5 语句 ECMAScript 中的语句以分号结尾...不过,最佳实践是始终在控制语句中使用代码块,即使要执行的只有一条语句,如下例所示: // 有效,但容易导致错误,应该避免 if (test) console.log(test); // 推荐 if...现代垃圾回收程序会基于对 JavaScript 运行时环境的探测来决定何时运行。探测机制因引擎而异,但基本上都是根据已分配对象的大小和数量来判断的。...比如,根据 V8 团队 2016 年的一篇博文的说法: “在一次完整的垃圾回收之后,V8 的堆增长策略会根据活跃对象的数量外加一些余量来确定何时再次垃圾回收。”...内存占用 Object 和 Map 的工程级实现在不同浏览器间存在明显差异,但存储单个键/值对所占用的内存数量都会随键的数量线性增加。批量添加或删除键/值对则取决于各浏览器对该类型内存分配的工程实现。

    67720

    mongodb拾遗

    语句 说明 备注 find() 查询全部数据 默认每200ms将数据flush到硬盘 find({id:1}) 精确查询 find({id:{$lt:5}) id小于5的全部数据 同样的还有$lte(...那么数组中的每个元素都会建立索引 find().explain() 解释查询语句 ensureIndex({name:1,age:1}) 为字段name和age建立复合索引 dropIndex("name...2记录所有,所有监视结果都在system.profile中 增删改操作 insert({id:1,name:"xiaoming",age:2}) 添加一条数据 集合不存在自动创建 如果不显示指定_id... 过滤文档只传递匹配的文档到管道中的下一个步骤 $limit  限制管道中文档的数量 $skip  跳过指定数量的文档,返回剩下的文档 $sort  对所有输入的文档进行排序 $group  对所有的文档进行分组然后计算聚集结果...用来动态的确定分组文档的字段。和key两者必须有一个 initial:reduce中使用变量的初始化 reduce:执行的reduce函数。函数需要返回值。 cond:执行过滤的条件。

    52710

    根据数据源字段动态设置报表中的列数量以及列宽度

    在报表系统中,我们通常会有这样的需求,就是由用户来决定报表中需要显示的数据,比如数据源中共有八列数据,用户可以自己选择在报表中显示哪些列,并且能够自动调整列的宽度,已铺满整个页面。...本文就讲解一下ActiveReports中该功能的实现方法。 第一步:设计包含所有列的报表模板,将数据源中的所有列先放置到报表设计界面,并设置你需要的列宽,最终界面如下: ?...第二步:在报表的后台代码中添加一个Columns的属性,用于接收用户选择的列,同时,在报表的ReportStart事件中添加以下代码: /// /// 用户选择的列名称...,并计算需要显示控件的总宽度 for (int c = 0; c < cols.Count; c++) { if (!...源码下载: 动态设置报表中的列数量以及列宽度

    4.9K100

    MongoDB初级入门

    ]}}) $exists 表示不存在 db.user.find({sex:{$exists:false}}) : 查找不存在sex这个字段的文档 slice $slice操作符控制查询返回的数组中元素的个数...此操作符根据参数{ field: value } 指定键名和键值选择出文档集合,并且该文档集合中指定array键将返回从指定数量的元素。...如果count的值大于数组中元素的数量,该查询返回数组中的所有元素的。...$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。...因为使用聚合之后,不能再使用limit()方法来限制 db.user.aggregate([{$group:{_id:"$name",sum_age:{$sum:"$age"}}},{$limit:1}]) : 根据姓名分组之后显示一条数据

    1.3K50

    Laravel Eloquent 模型关联关系(下)

    另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询为例...基于关联查询过滤模型实例 有结果过滤 有的时候,可能需要根据关联查询的结果来过滤查询结果,比如我们想要获取所有发布过文章的用户,可以这么做: $users = User::has('posts')->get...统计关联模型 我们还可以通过 Eloquent 提供的 withCount 方法在不加载关联模型的情况下统计关联结果的数量。...,这两个方法接收的是数组参数: // 插入一条记录 $post->comments()->create([ 'content' => $faker->paragraph, 'user_id' =...对于那些已存在的标签记录,我们可以通过更高效的方法与文章进行关联关系的绑定和解除,这个方法就是 sync,调用该方法时只需传入刚创建/更新后文章的标签对应 ID 值,至于哪些之前不存在的关联需要绑定,哪些存在的关联需要解除

    19.6K30

    Laravel学习记录--Model

    Laravel中Eloquent还支持动态作用域,动态作用域指在查询过程中动态设置预置过滤器的查询条件,动态作用域与本地作用域类似,都是以scope作为前缀,调用方法也相同,不同的是动态作用域可以通过额外参数指定查询条件...,如不指定默认为关联方法名type:存放关联类的字段,如不指定结合name构建关联字段(如果name为test,此字段为test_type)id :存放关联id(文章或视频)如不指定结合name构建关联字段..."uid" => 1 "uname" => "tzh" "country_id" => 2 ] 基于关联查询限制结果 当获取到模型记录时,你可能希望根据存在的关联对结果进行限制...当获取模型记录时,你可能需要根据不存在的关联对结果进行限制,如获取没有电话号码的用户记录,为了实现这个功能你可以使用doesntHave,并传递关联方法 如 public function show...,使用updateExistingPivot方法 该方法接受中间记录另一个的外键和一个关联数组进行更新 public function show(){ $stu = Stu::find(

    13.6K20
    领券