[从入门到脱鞋] Redis Hello World

night_stalker 2010-11-13
>>= Redis Hello World

redis 是非常小(gz 包只有 300 多 k)的,all-in-memory 的数据结构内存数据库。

* 内存才是本体,当缓存用的时候比 memcached 快。
* 可以通过 append-log 方式持久化。还提供了修整损坏的 log 的工具(redis-check-aof)。
  log 可以通过 bgrewriteaof 操作重写以缩小占用磁盘空间。
  -- 能持久化就能当数据库用啦!
* 所有 key 都在内存中,但是可以通过配置 virtual memory 让不常用的 value 存到磁盘中。
* 虽然非常简单,但是使用 nest gem 和 ohm gem 可以让它表现得比较像 sql 数据库。


>>= hello world

解压源码包,make (mingw 不行,里面有 fork 之类的东西,cygwin 可以)
不需要 install,对没有 root 权限的情况是福音 ……
启动服务器: 同一目录下 ./redis-server
配置是自明的,见同一目录下的 redis.conf


>>= 数据类型

bottom type: none
基本: string
集合: list, set, zset(有序set), hash
集合操作方法相应的以 l, s, z, h 开头

限制: 集合的元素必须是 string
但是这个限制可以通过 nest gem 解决,不用担心。


>>= 所有命令参考

有比较丰富的集合操作方法。见命令总集
常用命令见 redis-rb 的 readme
redis-rb 的所有命令参考


>>= 事务操作

multi ... exec / discard
在 redis-rb 里面,用 multi 加个 block 就可以了


>>= 持久化频率(配置 fsync)

always: 每个记录都保存,很慢很安全
everysecond: 很快较安全(最多丢失一秒数据)
never: 纯作缓存用而不是数据库用的时候 ..


>>= 缓存用的命令

expire 设置 key 在多久后失效
ttl 查看 key 的剩余时间


>>= ohm (object - hash - mapping)

装上 ohm, nest, 和 redis-rb 客户端
gem in ohm


ohm 提供了 常见场景的设计例子,非常的速成。

一点限制 写道
Operations on attributes of type list, set and counter are possible only after the object is created


要注意 ohm 的 macro 方法 attribute, set, list, counter, reference, collection 并不能生成基本集合(元素为字符串而非 Model 实例的引用)的属性,也就是你只能用 set :person, Person ,不能用 set :person, String。解决方法是使用实例方法 key:
obj.key[:person].sadd 'abc'


key[:symbol] 的方法和 redis 命令列表是一致的。

额外收获: cutest
Ohm::Model::Wrapper 是个 Monad 呢 ……


>>= 其他 tricks

有些操作需要在同一服务器上的东西才能搞,如 intersect。
什么,不知道什么是 intersect? intercourse 知道吧?所以速配网站非常需要 intersect!
redis-rb 比较聪明,会将比较相同的 key 放到同一个服务器中。
所以如果要对 "x" 和 "y" 的值进行 intersect 操作,可以用 redis-rb 把它们存为 "abcde_x" 和 "abcde_y" 的值。


>>= 其他链接

redis + sinatra 搭建小抄,完败 ever note
https://gist.github.com/93567/31c3c0a995066ca9008fab77c0c62922c15157a1

两个 init.d
https://gist.github.com/378102
https://gist.github.com/286422

实现自动完成一例
http://antirez.com/post/autocomplete-with-redis.html
易卡螺丝君 2010-11-13
现在mongodb的风头完全盖过了redis
night_stalker 2010-11-13
我喜欢小萝莉不喜欢大肥婆
易卡螺丝君 2010-11-13
为啥用白色字体...
花花公子 2010-11-13
ns你怎么看couchdb?
night_stalker 2010-11-14
白色好看 ……

couchdb 要装 erlang runtime 很麻烦吧 …… 没看过
mathgl 2010-11-14
cygwin version的redis 性能很是一般....
crackcell 2010-11-24
刚在真实项目中引进redis存大数据,表现非常满意。
java_xiaoyi 2011-07-15
易卡螺丝君 写道
现在mongodb的风头完全盖过了redis

额...下面不说我还以为没有字...
Global site tag (gtag.js) - Google Analytics