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
目录
相关文章
|
6天前
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
11天前
|
存储 NoSQL 安全
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
|
11天前
|
存储 JSON NoSQL
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
|
11天前
|
存储 NoSQL Redis
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
Redis第四弹,Redis实现list时候做出的优化ziplist(压缩链表,元素少的情况),可更好的节省空间list——(内部编码:quicklist)Object encoding
|
13天前
|
存储 缓存 负载均衡
【Redis】 String类型的内部编码与使用环境
【Redis】 String类型的内部编码与使用环境
|
13天前
|
机器学习/深度学习 XML NoSQL
【Redis】 String 字符串类型常见命令
【Redis】 String 字符串类型常见命令
|
17天前
|
存储 安全 Java
Java的List、Set、Queue等接口及其实现类的技术性文章
Java的List、Set、Queue等接口及其实现类的技术性文章
10 1
|
23天前
|
Java Redis
redis-学习笔记(Jedis hash简单命令)
redis-学习笔记(Jedis hash简单命令)
23 1
|
23天前
|
Java Redis
redis-学习笔记(Jedis list简单命令)
redis-学习笔记(Jedis list简单命令)
23 1
|
存储 消息中间件 NoSQL