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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 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 压缩列表

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
13天前
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
24天前
|
存储 安全 Java
Java的List、Set、Queue等接口及其实现类的技术性文章
Java的List、Set、Queue等接口及其实现类的技术性文章
11 1
|
30天前
|
Java Redis
redis-学习笔记(Jedis zset 简单命令)
redis-学习笔记(Jedis zset 简单命令)
29 3
|
30天前
|
Java Redis
redis-学习笔记(Jedis hash简单命令)
redis-学习笔记(Jedis hash简单命令)
26 1
|
30天前
|
存储 Java Redis
redis-学习笔记(Jedis set 简单命令)
redis-学习笔记(Jedis set 简单命令)
28 1
|
4天前
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。
|
3天前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
10 3
|
5天前
|
存储 编译器 C++
|
16天前
|
存储 安全 Java
Java 集合(List、Set、Map 等)相关问答归纳再整理
HashMap 中使用键对象来计算 hashcode 值 HashSet 使用成员对象来计算 hashcode 值,对于两个对象来说hashcode 可能相同,所以 equals() 方法用来判断对象的相等性,如果两个对象不同的话,那么返回 false。 HashMap 比较快,因为是使用唯一的键来获取对象,HashSet 较 HashMap 来说比较慢。 4.1.3 HashMap 与 TreeMap
10 2
|
26天前
|
C语言
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现(下)
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现
27 3