redis 学习笔记(一)
有过脚本语言编程经验的读者对字典(或称映射、关联数组)数据结构一定很熟悉,如代
码dict[“key”]="value"中dict是一个字典结构变量,字符串"key"是键名,而"value"是键值,在字
典中我们可以获取或设置键名对应的键值,也可以删除一个键。
Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允
许其他应用通过TCP协议读写字典中的内容。同大多数脚本语言中的字典一样,Redis字典中
的键值除了可以是字符串,还可以是其他数据类型。到目前为止Redis支持的键值数据类型如
下
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
内存存储与持久化
Redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis
在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑
上,Redis可以在一秒内读写超过十万个键值。
将数据存储在内存中也有问题,例如,程序退出后内存中的数据会丢失。不过 Redis提供
了对持久化的支持,即将可以内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
功能丰富
Redis虽然是作为数据库开发的,但由于其提供了丰富的功能,越来越多的人将其用作缓
存、队列系统等。Redis可谓是名副其实的多面手。
Redis可以为每个键设置生存时间(Time To Live,TTL),生存时间到期后键会自动被删
除。这一功能配合出色的性能让Redis可以作为缓存系统来使用,而且由于Redis支持持久化和
丰富的数据类型,使其成为了另一个非常流行的缓存系统Memcached的有力竞争者。
讨论 关于Redis和Memcached优劣的讨论一直是一个热门的话题。在性能上Redis是
单线程模型,而Memcached支持多线程,所以在多核服务器上后者的性能更高一些。然
而,前面已经介绍过,Redis的性能已经足够优异,在绝大部分场合下其性能都不会成为瓶
颈。所以在使用时更应该关心的是二者在功能上的区别,如果需要用到高级的数据类型
或是持久化等功能,Redis将会是Memcached很好的替代品。
作为缓存系统,Redis还可以限定数据占用的最大内存空间,在数据达到空间限制后可以
按照一定的规则自动淘汰不需要的键。
除此之外,Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易地
实现一个高性能的优先级队列。同时在更高层面上,Redis还支持“发布/订阅”的消息模式,可
以基于此构建聊天室等系统。
参考书籍:Redis 入门指南