• Redis初步探索


    Redis(Remote Dictionary Service 远程字典服务)

    基础数据结构

    Redis所有数据结构都以唯一的key字符作为名称,然后通过这一唯一key值来获取相应的value数据。不同类型的数据结构差异就在于value的结构不一样。

    1.String

    字符串String是Redis最简单的数据结构,内部结构就是一个字符数组,常见用途就是用来缓存JSON序列化之后的用户信息等数据,取出数据则需要反序列化。Redis的字符串是动态字符串,

    是可以修改的,内部结构类似于ArrayList,采用预分配冗余空间的方式减少内存的频繁分配。扩容:当字符串长度小于1MB时,扩容为当前的2倍,如果字符串长度超过1MB时,则扩容一次

    只会多扩1MB的空间。

    2.list

    Redis的列表相当于Linkedlist,是一个链表的结构,这意味着它的插入和删除操作非常快,时间复杂度为O·(1),但是索引定位很慢,时间复杂度最坏为O(n)。

    列表中的每个元素都使用双向指针顺序,可以同时支持前向后向遍历,其实它的底层存储并不只是一个单纯的linkedlist,而是一个快速链表的(quicklist)的结构。

    业务场景:

    队列(先进先出,常用于消息排队和异步逻辑处理,它可以确保元素的访问顺序性)

    通过rpush和lpop实现,右进左出

    栈(先进后出)

    通过rpush和rpop实现,右进右出

    3.hash

    相当于HashMap,是一个无序结构,在实现结构上也是一个数据+链表的二维结构,不过Redis的值只能是字符串,并且他扩容时候的rehash方式是一个渐进式rehash策略,

    它在rehash的同时,保留新旧两个hash结构,查询会同时查询两个hash结构,然后在后续的定时任务以及hash操作指令中,循序渐进的将旧的hash内容一点点迁移到新的

    hash结构中。

    4.set

    相当于HashSet,它内部的键值对是无序的、唯一的。它的内部实现相当于一个特殊的hash,其中所有的value都是一个值null,当集合中最后一个元素被移除之后,数据结构

    被自动删除,内存被回收。set结构有去重功能,可以保证用户的唯一性,可以实现一些如保证一个用户不会被选中两次的业务场景。

    5.zset

    类似于SortedSet和HashMap一方面它是一个set,保证内部value的唯一性,另一方面它可以给每个value赋予一个score,代表它的排序权重,内部是以跳跃列表的数据结构

    来实现的。

    常见业务场景比如通过value存储用户ID,score是用户评分,可以通过评分排序来得到用户排名。

  • 相关阅读:
    初遇黑客
    第四周学习总结
    第三周学习总结
    关于base64编码的原理及如何在python中实现
    在python中如何将十进制小数转换成二进制
    《信息安全专业导论》第二周学习总结
    计算机科学概论速读问题
    刘谨铭的自我介绍
    师生关系
    20201318快速浏览教材提问
  • 原文地址:https://www.cnblogs.com/nxjblog/p/13205739.html
Copyright © 2020-2023  润新知