The GuideBook Of Redis——Redis入门指南
本博客为《Redis入门指南》一书的读书笔记。
第一章
特性
存储结构
redis 以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。 redis的键值有五种类型,这跟常见的关系数据库的二维表的存储结构有较大差异。在redis中,存储方式和对多种类型的支持和其在开发程序中非常相似。
内存存储与持久化
所有数据都存储在内存中,也可以讲内存中的数据异步写入到硬盘中。
功能丰富
redis可以为每个键设置ttl,可以限定数据占用的最大内存空间,这些特点可以作为缓存系统来使用;
redis支持阻塞式读取,支持发布订阅,所以可以实现队列系统。
redis vs memcached:
redis 是单线程模型,memcached支持多线程。如果需要用到高级的数据结构或者是持久化等功能,则redis较为出色。
简单稳定
简单体现在,如要在关系数据库中获取posts表内id为1的纪录的title的字段,则sql语句为select title from posts where id =1 limit 1
,在redis中,则是hget post:1 title
第二章准备
停止redis
redis-cli : shutdown 或者 kill redis-pid
多数据库
一个redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。默认支持16个数据字典。客户端自动选择0号数据库,但可以通过select命令更换数据库。但它与关系数据库又有所不同。
- 不支持自定义数据库名
- 不支持为每个数据库设置不同的密码,要么可以全部访问,要么都不可以
- 多个数据库之间不是完全隔离,如flushall可以清空所有数据库中的数据
所以这更像是命名空间,而不适合存储不同应用程序的数据。不适宜使用0号存储a应用的数据,1号存储b应用的数据。不同的应用应该使用不同的redis实例,由于redis非常轻量级,不用担心多个redis实例会额外占用很多内存。
第三章入门
数据类型
字符串类型
键名的命名最好是:对象类型:对象id:对象属性,如果有多个单词,不用_,而用.来分隔。
散列类型
redis里面的数据类型不支持嵌套。
散列类型适合存储对象,使用对象类别和id构成键名,使用字段表示对象的属性,而字段值则存储属性值。在关系数据库中,要求所有的纪录都拥有同样的属性,无法单独为某条纪录增减属性,如某条纪录要增加date属性,则该表中所有的纪录都要增加该属性。但散列表不存在这个问题。散列中,有些地方说键名是指字段(字段),如hkeys key,hkeys中的key其实指字段,但后面那个key是指键名。
列表类型
列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时候时间复杂度为O(1),但是代价是通过索引访问元素比较慢。所以适合实现诸如”新鲜事”或”日志”这样很少访问中间元素的应用。
可以用列表来模拟栈和队列,栈用LPUSH和LPOP或者RPUSH和RPOP来实现,队列用LPUSH和RPOP或RPUSH和LPOP。
LRANGE key start stop。包含stop,起始索引从0开始。支持负索引,表示从右边开始计算,-1表示最右边第一个,-2表示最右边第二个。所以LRANGE number 0 -1可以获取列表中所有元素。
集合类型
集合类型在redis内部是使用值为空的散列表实现的。
有序集合
有序集合类型是使用散列表和跳跃表实现的,即使读取位于中间部分的数据速度也很快,时间复杂度是O(log(N))。列表不能简单地调整某个元素的位置,但是有序集合可以通过更改这个元素的分数。
实现诸如“按点击量排序”和“按时间排序”,可以把点击量和时间分别作为分数。
第四章进阶
事务
错误处理
如果一个事务中的某个命令执行出错,redis会怎么处理?
(1)语法错误
分版本,2.6之前的版本会忽略有语法错误的命名,执行事务中正确的命令。
2.6.5这个版本(书中的版本)如果命名有语法错误,则一个都不会执行。
(2)运行错误
运行错误是指命令执行的时候出现的错误,比如使用散列类型的命令操作集合类型的键。如果事务里 的一条命令出现了运行错误,事务里其它的命令依然会执行,包括出错命令之后的命令。
但要注意,redis的事务没有关系数据中提供的回滚功能。
WATCH命令介绍
watch命令可以监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。监控一直持续到exec命令。
WATCH 使得 EXEC命令需要有条件地执行: 事务只能在所有被监视键都没有被修改的前提下执行, 如果这个前提不能满足的话,事务就不会被执行。
生存时间
如果使用了watch命令监测了一个拥有生存时间的键,该键时间到期自动删除并不会被watcj命令认为该键被改变。
实现访问频率限制
实现缓存
修改配置文件的maxmemory参数,限制redis最大可用内存大小,当超出了这个限制时redis会依据maxmemory-policy参数制定的策略来删除不需要的键。,直到redis占用的内存小于指定内存。
排序
sort命令
BY参数
语法规则为”by 参考键”,表示为(键名->字段名)。如果提供了by参数,sort命令将不再依据元素自身的值进行排序,而是对每个元素的值替换参考键的第一个‘*’并获取其值,然后依据该值进行排序。如果参考键都相同,则会再比较元素本身的值来决定元素的顺序。
####