redis 入门笔记
2013-01-28 17:34 低调de草原狼 阅读(175) 评论(0) 编辑 收藏 举报
1.
key-value数据库,高性能的 读/存 数据库
其存储 < RAM(内存)
数据存储的两种形式 (1)内存==>持久化到硬盘 (2)一条一条注入硬盘,当然效率较低
其性能10倍于MySQL
是一种不支持SQL的数据库(NoSQL)
2.
Redis键
key是二进制安全的,也就是说,从"foo"字符串到"JPEG"的文件都可以
eg:"user:1000:password" "object-type:id:field"
3.
字符串类型
命令:SET GET
eg:set mykey "abc"
get mykey
4.
INCR
将字符串值解析成整型,将其加1避免key值重复的好办法
5.
list
redis的list是基于linked lists 实现的,这意味着即使在一个list中有数百万个元素,在头部和尾部添加一个元素的操作,其时间复杂度也是常数级别的
访问速度受限
LPUSH
Redis Lists用Linked list实现的原因是:
对于数据库系统来说,至关重要的特征是:能非常快的在很大的列表上添加元素,另一个重要因素是,Redis lists能在常数时间取得常数长度
LPUSH命令:可向list左边(头部)添加一个新元素
RPUSH命令:可向list的右边(尾部)添加一个新元素
LRANGE命令:可从list中取出一定范围的元素
这两个索引都可以为负,来告知Redis从尾数开始计数,因此-1表示最后一个元素,-2表示list中的倒数第二个元素
eg:rpush messages "hello"
lrange messages 0 2
这样就不需要SQL ORDER BY操作,将会非常快,也会非常容易扩展到百万级别元素的规模
LLEN得到list的长度
向Redis list压入ID而不是实际的数据
eg:incr next.news.id
set news:1:title "Redis is simple"
set news:1:url "http://code.google.com/"
lpush submitted.news 1
6.
Redis集合
Redis集合是未排序的集合,其元素是二进制安全的字符串
SADD命令:可以向集合添加一个新元素
eg:sadd myset 1
sadd myset 2
sadd myset 3
SMEMBERS命令:检查某个元素是否存在
eg:smembers myset
简单的方案:
对每个想加标签的对象,用一个标签ID集合与之相关联,并且对于每个已有的标签,一组对象ID与之关联,
例如假设我们的新闻ID 1000被加了三个标签tag1,2,5和77,就可以设置下面两个集合:
sadd news:1000:tags 1
sadd news:1000:tags 2
sadd news:1000:tags 5
sadd news:1000:tags 77
sadd tag:1:objects 1000
sadd tag:2:objects 1000
sadd tag:5:objects 1000
sadd tag:77:objects 1000
获得一个对象的所有标签:
smembers news:1000:tags
SINTER命令:可以在不同集合之间取出交集
eg:sinter tag:1:objects tag:2:objects tag:5:objects tag:77:objects
Redis集合和list都是可排序的
Redis1.4将增加Hash类型
基本上有序集合从某种程度上说是SQL世界索引 在Redis中的等价物
它包含一个精简的有序列表和一个Hash Table,因此添加一个元素的时间复杂度是O(log(N))
ZRANGE命令:有序输出
ZREVRANGE命令:反序输出
eg:zrange hackers 0 -1
zrevrange hackers 0 -1
SORT命令:对所有集合做不同的排序(耗费CPU)
要想得到多种排序,一种可选方案是同时每个元素加入多个有序集合。
例如获取所有1950年之前出生的人,可以用ZRANGEBYSCORE命令
eg:zrangebyscore backers -inf 1950
ZREMRANGEBYSCORE命令:删除区间内的元素
例如从有序集合中删除生日介于1940-->1960
eg:zremrangebyscore hackers 1940 1960 返回已删除元素数量