Redis 基础数据结构

Redis 基础数据结构

1. 背景

​ 为什么会产生NoSQL数据库? 和传统的RDBM的区别在哪里? 有什么突出优势吗?

​ 传统数据库如MySQL, 更多的是表格结构化的行存储数据, 固定的模式(需要数据适应表结构), 通过事务特性控制数据一致性;存在问题: 扩展性-面临表结构修改困难导致的存储数据格式受限, 读写性能-传统关系型数据库由于会将数据持久化到磁盘, 并发和海量数据的情况下, 磁盘读写压力大.

​ NoSQL的特性: 存储非结构化的数据-如文本, 图片, 音频, 视频; 扩展性强-表与表之间没有关联, 能分片存储, 扩缩容简单; 最终一致性(BASE理论)-保证数据的最终一致性;高频读写支持-海量数据的存储; 针对不同的存储类型: 可分为K-V存储(Redis), 文档存储(MongoDB), 列存储(HBase), 图存储(Neo4j), 对象存储(OSS); NoSQL 产品汇总(https://hostingdata.co.uk/nosql-database/)

​ NewSQL则是前两者的结合, 如TiDB(PingCAP), ScaleDB

2. 基础数据类型

数据结构: String, Hash, Set, List, Zset

2.1 String字符串
(1)存储数据类型: int, float, string
(2)存储原理

SDS, redisObject, 内部编码格式比较

  • int: 存储8个字节的长整型(long, 2^64 - 1)
  • embstr: emdstr格式的SDS, 存储小于44个字节的字符串
  • raw: 存储大于44个字节的字符串.
(3)底层分析:

SDS: Simple Dynamic String 简单动态字符串, (本质字符串数组) 空间换时间

​ 为什么采用SDS实现字符串? C语言本身没有字符串类型, 只能是使用字符数组:

​ a.使用字符串数组需要给目标变量分配足够的空间, 否则可能会溢出

​ b.获取字符串长度需要遍历整个字符串

​ c.C 中字符串长度变更会对字符串数组做内存重分配

​ d.存储图片, 音视频, 压缩文件等二进制文件的不安全性

引入SDS带来的优势

​ 1.不用担心内存溢出, 会对SDS扩容

​ 2.通过空间换时间方式, 获取字符串的长度

​ 3.通过"空间预分配" 和 “惰性空间释放”, 防止多次重分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值