Redis是一款完全免费的,高性能的key-value数据库,目前被大多数公司用来做缓存。Redis作为一个内存数据库,它的读写速度非常快:读速度可以达到110000次/s,写的速度是81000次/s 。相比于其他key-value数据库,Redis的另一大特性就是支持多种数据类型。今天我们来一起聊一聊Redis的5种基础数据类型。

安装Redis

在学习之前,我们要先自己安装一个Redis环境用来自己动手操作,感受一下。

Windows

**下载地址:**github.com/MSOpenTech/…

Windows用户可以在这个地址下载相应版本的压缩包,在C盘进行解压,解压后,将目录重命名为redis。在cmd中进入该目录,然后运行redis-server.exe redis.windows.conf。另外,也可以把目录加到环境变量中,这样就不需要再cd进入这个目录了。

Redis的server安装好后,再打开一个新的cmd, 运行redis-cli.exe -h 127.0.0.1 -p 6379,就可以开始进行操作了。其中-h参数表示host,-p参数表示port,可以省略,默认是6379。

Linux
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
$ tar xzf redis-4.0.11.tar.gz
$ cd redis-4.0.11
$ make
复制代码

执行以上命令下载并安装Redis,接着进入src目录,运行redis-server。再执行 $ ./redis-cli命令,就可以开始操作了。

Ubuntu

Ubuntu可以直接使用apt-get安装

$sudo apt-get update
$sudo apt-get install redis-server
复制代码

启动方法这里不再赘述。

Mac

Mac用户可以使用homebrew安装Redis

brew install redis
复制代码
其他方法

除了上述方法以外,我们还可以从GitHub下载源码,对源码进行编译。URL是git@github.com:antirez/redis.git。也可以从官网下载Docker,通过运行Docker来操作。

基础数据类型

Redis支持5种基础数据类型,下面我们来一一介绍,由于我本身是Java程序员,因此会将这些数据类型与Java中的数据类型进行类比。当然,你也可以拿自己熟悉的语言来理解。

String

String是最基本的,也是最常用的类型。它是二进制安全的,也就是说,我们可以将对象序列化成json字符串作为value值存入Redis。在分配内存时,Redis会为一个字符串分配一些冗余的空间,以避免因字符串的值改变而出现频繁的内存分配操作。当字符串长度小于1M时,每次扩容都会加倍现有空间,当长度大于1M时,每次扩容,增加1M,Redis字符串的最大长度是512M。

Hash

Hash是键值对集合,相当于Java中的HashMap,实际结构也和HashMap一样,是数组+链表的结构。所不同的是扩容的方式不同,HashMap是进行一次rehash,而Redis为了不阻塞服务,会创建一个新的数组,在查询时会同时查询两个Hash,然后在逐渐将旧的Hash内容转移到新的中去。一个Hash最大可以存储232-1个键值对。

List

List相当于Java中的LinkedList,它的插入和删除操作的时间复杂度为O(1),而查询操作的时间复杂度为O(n)。我们可以利用List的rpush、rpop、lpush和lpop命令来构建队列或者栈。列表最多可以存储232-1个元素。

Set

Set是String类型的无序集合,并且元素唯一,相当于Java中的HashSet,它的插入、删除、查询操作的时间复杂度都是O(1)。其最大元素数也是232-1个。

zset

zset可以看做是Java中SortedSet和HashMap的结合,一方面它不允许元素重复,另一方面,它通过score为每个元素进行排序。

两个规则

对于以上5种数据结构,有两个通用的规则:

  1. 如果不存在,就先创建,再进行操作
  2. 如果元素为空,就会释放内存

过期时间

我们可以对上面所有的类型设置过期时间,如果时间到了,Redis 会自动删除相应的对象。

小结

本文简单介绍了Redis的安装方法和Redis的5中基本数据结构。主要目的是帮助没有基础的同学快速入门,对于已经了解Redis的同学也是知识的巩固,想要了解更多关于Redis的知识,可以持续关注我,后面还有更精彩的内容分享给大家。

Redis基础数据结构相关推荐

  1. Redis基础数据结构内部实现简单介绍

    5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...

  2. redis 基础数据结构实现

    参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...

  3. redis 基础数据结构 之压缩列表

    redis基础数据结构 之 ziplist压缩链表 给新观众老爷的开场 ziplist是什么? ziplist的设计目的 ziplist的作用 ziplist的小瑕疵 ziplist 的空间布局 zl ...

  4. redis基础数据结构(一)可变长字符串sds

    redis中的字符串是二进制安全的,传统C字符串以'\0'为结尾,只能用于保存纯文本,不能用于保存音频.视频等二进制文件,因为只要在中间遇到'\0'就被截断了.redis的sds模块所有api都使用二 ...

  5. Redis基础数据结构String:你知道String长度限制多少吗

    字符串String是Redis最简单最常用的数据结构,它的内部表示就是一个字符数组,如图所示.Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一key值来获取相应的value数 ...

  6. Redis基础篇(万丈高楼平地起):核心底层数据结构

    微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...

  7. 【《Redis深度历险》读书笔记(1)】基础:万丈高楼平地起 ——Redis 5种基础数据结构

    [时间]2021.11.16 [题目][<Redis深度历险>读书笔记(1)]基础:万丈高楼平地起 --Redis 基础数据结构 本栏目是<Redis深度历险:核心原理和应用实践&g ...

  8. Redis高级数据结构原理解析-bitmap,hyperloglog

    Redis 位图 开发过程中,我们可能遇到这种场景记录用户的打卡情况,签到情况,这些场景只有两种结果,有或者没有,加入记录的数据量比较大,比如用一年的数据,如果用Redis中普通key/value,每 ...

  9. redis源码剖析(7):基础数据结构quicklist

    目录 1.quicklist概述 2.quicklist源码分析 2.1 定义 2.2 push操作 2.3 节点压缩 3.总结 1.quicklist概述    quicklist是一个3.2版本之 ...

最新文章

  1. python垃圾回收机制(GC)相关问题
  2. 设置Linux网络的方法
  3. Codeforces Round #737 (Div. 2) D. Ezzat and Grid 线段树动态开点
  4. php 静态方法特点,浅析php静态方法与非静态方法的用法区别
  5. Linux下文件系统目录结构
  6. java读取某个文件夹下的所有文件
  7. 让油猴脚本只执行一次
  8. 怎么反编译java dll_JAVA 反编译工具,如何在Java中调用DLL方法
  9. QTreeView+自定义Model实现示例
  10. IOS逆向-动态调试
  11. 我的面试经历(2013.5)
  12. VBA -[知识点]: 字典
  13. CVE-2019-16097:Harbor任意管理员注册漏洞复现
  14. win10自动修复无法关闭的解决方案
  15. 《船舶流体力学》知识点总结——1.绪论
  16. ios pan手势滑动消失动画_iOS 当你的左滑手势失效时的解决方案
  17. H3C ISDN BRI和PRI
  18. IQ正交调制及星座图
  19. 新代plc编程代码及解释_新代系统 PLC 与CNC 接口列表说明
  20. IOS跟ANDROID的区别

热门文章

  1. [ES6] 细化ES6之 -- ECMA6是什么
  2. 链表的分解(C++)
  3. oracle链接池满了怎么办,Oracle连接数满了
  4. code的bootstrap如何有提示 vs_如何用DataFocus对Excel表中数据进行分析?
  5. vue 生成发布包_Vue 3.0 终于正正正正正式发布了!
  6. MySQL总结(二)——入门
  7. “云时代架构”经典文章阅读感想十六
  8. TensorFlow函数(十)tf.global_variables_initializer()
  9. 如何去掉有背景图的a标签的边框
  10. 去年下半年blog文章导入完毕