一、说明
官网:中文网链接
(一)主要基本数据类型
你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。下列这些数据类型都可作为值类型:
二进制安全的字符串
Lists: 按插入顺序排序的字符串元素的集合。他们基本上就是链表(linked lists)。
Sets: 不重复且无序的字符串元素的集合。
Sorted sets,类似Sets,但是每个字符串元素都关联到一个叫score浮动数值(floating number value)。里面的元素总是通过score进行着排序,所以不同的是,它是可以检索的一系列元素。(例如你可能会问:给我前面10个或者后面10个元素)。
Hashes,由field和关联的value组成的map。field和value都是字符串的。这和Ruby、Python的hashes很像。
Bit arrays (或者说 simply bitmaps): 通过特殊的命令,你可以将 String 值当作一系列 bits 处理:可以设置和清除单独的 bits,数出所有设为 1 的 bits 的数量,找到最前的被设为 1 或 0 的 bit,等等。
HyperLogLogs: 这是被用于估计一个 set 中元素数量的概率性的数据结构。别害怕,它比看起来的样子要简单…参见本教程的 HyperLogLog 部分。
学习这些数据类型的原理,以及如何使用它们解决 command reference 中的特定问题,并不总是不关紧要的。所以,本文档是一个关于 Redis 数据类型和它们最常见特性的导论。 在所有的例子中,我们将使用 redis-cli 工具。它是一个简单而有用的命令行工具,用于向 Redis 服务器发出命令。
(二) Redis keys
Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。
关于key的几条规则:
①太长的键值不是个好主意,例如1024字节的键值就不是个好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。
②太短的键值通常也不是好主意,如果你要用”u:1000:pwd”来代替”user:1000:password”,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小。当然,没人阻止您一定要用更短的键值节省一丁点儿空间。
③最好坚持一种模式。例如:“object-type:id:field”就是个不错的注意,像这样“user:1000:password”。我喜欢对多单词的字段名中加上一个点,就像这样:“comment:1234:reply.to”。
二、主要基本数据类型
(一)String
String是很多程序的基本类型对吧,在开始学Java也是经常学这个类。Redis也不例外。这是最简单Redis类型。如果你只用这种类型,Redis就像一个可以持久化的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失)。
① redis string 类型的使用
//设置值
set key1 "厚积薄发"
//获取值
get key1
正如你所见到的,通常用SET command 和 GET command来设置和获取字符串值。值可以是任何种类的字符串(包括二进制数据),例如你可以在一个键下保存一副jpeg图片。值的长度不能超过512 MB。
② Redis List 列表类型
理论背景:
在信息技术界List这个词常常被使用不当。例如”Python Lists”就名不副实(名为Linked Lists),但他们实际上是数组(同样的数据类型在Ruby中叫数组)
一般意义上讲,列表就是有序元素的序列:10,20,1,2,3就是一个列表。但用数组实现的List和用Linked List实现的List,在属性方面大不相同。Redis lists基于Linked Lists实现。这意味着即使在一个list中有数百万个元素,在头部或尾部添加一个元素的操作,其时间复杂度也是常数级别的。用LPUSH 命令在十个元素的list头部添加新元素,和在千万元素list头部添加新元素的速度相同。
那么,坏消息是什么?在数组实现的list中利用索引访问元素的速度极快,而同样的操作在linked list实现的list上没有那么快。Redis Lists用linked list实现的原因是:对于数据库系统来说,至关重要的特性是:能非常快的在很大的列表上添加元素。另一个重要因素是,正如你将要看到的:Redis lists能在常数时间取得常数长度。如果快速访问集合元素很重要,建议使用可排序集合(sorted sets)。可排序集合我们会随后介绍。
③ Hash 哈希类型
Hash 便于表示 objects,实际上,你可以放入一个 hash 的域数量实际上没有限制(除了可用内存以外)。所以,你可以在你的应用中以不同的方式使用 hash。
④ Set 集合类型
⑤ Zset 有序集合
⑥ Geospatial 地理位置
⑦ Hyperloglog基数统计
⑧ Bitmap 位图场景
说明:这是学习了一套视频后做的简单笔记,后面应用到项目上才写一些见解,先把后续的东西学下去。