Redis 笔记

Install

Ubuntu

Ubuntu安装是最简单的。

$ sudo apt-get install redis-serve

Ubuntu安装之后最好进行一步操作:干掉自启动

我自己什么都玩,MySQL,MongoDB,Nginx,还有其他杂七杂八的,现在再加上一个redis

我电脑配置比较渣,这些东西全都开机启动我是有些吃不消的。因此,有必要干掉自启动

cd /etc/rc2.d/
ls

把你想干掉的S改成K,你看到就知道怎么做了:)

Others

不过Ubuntu的apt工具虽然简单,但是版本号可能会低一些。所以也可以用主流的安装方法:

$ wget http://download.redis.io/releases/redis-3.0.3.tar.gz
$ tar xzf redis-3.0.3.tar.gz
$ cd redis-3.0.3
$ make

Notice

要在config文件中

daemonize no # 改成yes

String

SET foo bar
# 设置 foo 及其值
GET foo
# 获取 foo 的值
SETEX foo 60 bar
# 设置 foo 的值为 bar 并存在60秒
APPEND foo baz
# 在 foo 的值后面追加 baz 返回 barbaz
MSET foo bar baz qux
# 多值添加 key-value
MGET foo baz
# 多值获取
STRLEN foo
# 值长度获取
INCR foo
DECR foo
# 自增自减

Hash

这种数据结构对于学PHP的我来说有点儿曲折。并不是我们所说的

<?php 
	$bar = ['foo'=>'baz'];
	// 而是这个样子的(如果非要用PHP来表示的话)
	$field1 = ['key' => 'value1'];
	$field2 = ['key' => 'value2'];
 ?>

由此,我个人的理解是以key为索引,对应自己的fieldvalue, 那么,PHP的写法或许要改写成这样:

<?php 
	$key = [
		'field1' => 'value1',
		'field2' => 'value2'
	];
 ?>
HSET foo bar baz
# HSET key field value
# 在bar域中给foo赋值baz
HMSET site iamhele iamhele.com imhele imhele.com
# HMSET key field value [field value]
HGET site iamhele
# HGET key field
HMGET site iamhele imhele
# HMGET key field [field]

HGETALL key
# 这个比较牛逼了,获取所有key下的field和value.
HEXISTS site iamhele
# HEXISTS key field 验证有木有
HKEYS key
# 获取此key下的field
HLEN key
# 获取此key下的field的数量
HDEL key field [field]
# 干掉key下的field...

List

那么用PHP来模仿一下这家伙的数据结构吧.

<?php 
	$key = ['value1','value2'];
	//自带角标index
 ?>

过几天画个图表示一下: yield

这货好像是堆栈结构的。。。FILO(先进后出)

LPUSH key value [value]
# LeftPush 插入到链表头部
RPUSH key value [value]
# RightPush 插入到链表尾部
LSET key index value
# LSET可以将列表 key 下标为index的元素的值设置为 value
LPOP key
# 把最左边(头)的混蛋(key)的值拿出来,然后干掉。
LINDEX key index
# 通过key和index获取值 >0 从左边数,<0 从右边数
LINSERT key BEFORE|AFTER pivot value
# pivot 轴心中心的意思.看来不用讲了.这个代笔是个值.
LREM key count value
# (list remove)干掉key里面的value.干掉几个呢? count决定
# count == 0 诛九族
# count >  0 从前面开始, 干掉 count 个就收手了.
# count <  0 从后面开始, 干掉 count 个就收手.话说是不是口味太重了,从后面开始...
LLEN key
# 好吧,这货到底有几个值?(list length)

LTRIM key start stop
# 选妃子啦,start到stop之间的留下,其他的拖出去斩了(trim n.修剪,削齐)

Set

感觉这种数据类型也挺像上面那种的,不过可以从中间拿出来,就跟链表没什么关系了。

<?php 
	//没有index可以随意从中间拿数据
	$key1 = ['member1','member2'];
	$key2 = ['member1','member2'];
 ?>
SADD key member [member]
# 添加集合
SPOP key
# 随机取出一个(待确认)
SMEMBERS key
# 取出集合中的所有元素
SCARD key
# 查看集合中的元素数量
SDIFF key [key ...]
# 以前一个key为基准,比较并取出差集
SINTER key [key ...]
# 交集
SUNION key [key ...]
# 并集
SISMEMBER key member
# 这个member是不是这个key里面的?
SMOVE source destination member
# 把member从source移动到destination集合
# source 和 destination 都是key
SREM key member [member ...]
# 删除 key 下的 member(set remove)

Zset

这个真的不好做。php里没有这种哎。

ZADD key score member [[score member] [score member] ...]
# 添加成员和评分
ZREM key member [member ...]
# 删除啦
ZSCORE key member
# 获取评分
ZRANGE key start stop [WITHSCORES]
# 拿到指定区域的member
ZCARD key
# 总共有几个?
ZCOUNT key min max
# score在min和max之间的key的members的数量(比如:这个月给几个人发200-3000块的工资?)
ZRANK key member
ZREVRANK key member
# 按score 从小到大排序,然后取得当前score
# 按score 从大到小排序,同上。
ZINCRBY key increment member
# 给key的member的score加increment的值。(加薪,加分)

Keys

这里就是总览所有的key的一些操作了。

KEYS pattern
# pattern 里面写一些通配符吧*?[]什么的
EXISTS key
# 这个key到底存不存在啊
MOVE key db
# 把key移动到另一个database
RENAME key newkey
# 改名
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
# 排序
DUMP key
# 序列化。。。什么鬼。。。
EXPIRE key seconds
# 多少秒以后,这个key自杀给你看。非常有用
TTL key
# 这货还有多久才能去领便当

Transaction

有时候得用到事务,就是把一系列的命令一起执行。

MULTI # begin
SET key value
ZADD Zkey 1 member
GET key
ZSCORE Zkey member
EXEC # execute
DISCARD # 取消事务

Resources

这里有几个资源很不错的: