redis-学习笔记(string , hash , list , set , zset 前置知识)

简介: redis-学习笔记(string , hash , list , set , zset 前置知识)

Redis 中数据库的选择

共有16个数据库 [0 - 15号], 彼此之间相互隔离, 互不影响

默认使用 0 号


select dbindex

选择数据库


flushdb [async | sync]

清空数据库

async 异步方式

sync 同步方式


Redis 中简单数据类型在 C++ 和 Java 中的类似实现


当你使用上述的某一数据结构, redis 会给你声明, 我给你一个符合该复杂度的数据结构, 但是底层如何实现, 用什么实现, 是不是我声明的这个数据结构, 你别管, 这个具体的数据实现方式, 就是内部编码 (傲娇脸)


Redis 中简单数据结构的内部编码

string

  • raw 最基本的字符串 (底层是持有一个 char 数组 [C++], 或者 byte 数组 [Java]) (C++) — (C++ 中里的 char 是1个字节, 等价于 Java 中的 char , 而 Java 中的 char 是2个字节的)
  • int 通常用来实现 “计数” 等功能
  • embstr 针对短字符串进行的特殊优化

hash

  • hashtable 是最基本的哈希表, redis 内部的哈希表的实现, 整体思想和 Java 标准库中的 HashTable 相似, 但是实现方式不太一样
  • ziplist 在哈希表里面元素较少时, 会优化成 ziplist (压缩列表, 能够节省时间 [长度就两三个元素的哈希表, 单开一个哈希是不是有点浪费, 直接用列表有没有可能更快? 毕竟哈希的查找方法和链表的查找方法不太一样] )

list

  • linkedlist 链表, 其实现类似于 C++ 中的 deque(双端队列)
  • ziplist 压缩列表 从 redis3.2 开始, quicklist 代替了 linkendlist 和 ziplist , 同时兼顾二者的优点, quickedlist 是一个链表, 每个元素又是一个 ziplist, 折衷考虑到 空间和效率

set

  • hashtable
  • intset该集合中存取的都是整数类型

zset

  • skiplist 跳表, 也是链表, 不同于普通的链表, 每个节点上有多个指针域, 巧妙 搭配这些指针域的指向,可以实现跳跃查找 O(logN)
  • ziplist 压缩列表

目录
相关文章
|
存储 NoSQL Java
Redis如何处理Hash冲突?
在 Redis 中,哈希表是一种常见的数据结构,通常用于存储对象的属性,对于哈希表,最常遇到的是哈希冲突,那么,当 Redis遇到Hash冲突会如何处理?这篇文章,我们将详细介绍Redis如何处理哈希冲突,并探讨其性能和实现细节。
520 2
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
272 18
你对Collection中Set、List、Map理解?
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
227 4
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
280 1
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
258 3
|
9月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
488 5
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
298 0
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
405 11
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
444 9
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
299 1