基本安装和用法:http://www.tuicool.com/articles/QzMRNb
Redis如何通过本机客户端访问远程服务器段:http://blog.sina.com.cn/s/blog_4a552a740101kdfz.html
启动redis:./src/redis-server redis.conf
客户端访问redis方式:./src/redis-cli -h [host] -p [port] 或者直接使用src/redis-cli 默认的host :127.0.0.1 ip:6379
reis基本用法-database:虽然redis是按照key-value进行存储,但redis引入了“databse”概念:
- reids安装key-value的方式存储数据,每个key都属于一个databses;
- 默认是redis开启了16个database,编号为0~15;
- 通过redis-cli登录redis后,默认的是第0个databases;
切换databases用>select [DB INDEX] 如:select 12
查看redis各个databases的keys统计信息:>info keyspace
redis基本用法(无所谓大小写):
key pattern==>获得符合规则的键名列表
pattern的格式有:
? 匹配一个字符;
* 匹配任一个(包括0个)字符;
[] 匹配括号中的任意一个字符;
x 匹配字符x,主要用于转义符号。如需要匹配? 就用?
set <键名> <值>==>命令建立一个键,如set bar 1;
exists <键名>==>判断一个键是否存在;
DEL <键名>==>删除一个键;
TYPE <键名>==>获得键的数据类型;
字符串类型
Strings:set <key> <value>
get <key>
set QQ tecent;
get qq;
exists qq;
APPEND ==>向尾部增加值,用法APPEND key value
如:SET key hello
APPEND key " world!"
STRLEN ==>获取字符串长度,用法 STRLEN key
MGET ==>同时获取多个键的值,用法 MGET key [key ...]
MSET ==>同时设置多个键的值,用法 MSET key value [key value...]
位操作
GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end]
BITOP operate destkey key [key...]
GETBIT命令可以获取一个字符串类型键指定位置的二进制的值(0或者1),所以从0开始。如:GETBIT foo 0
SETBIT命令和GETBIT命令相对应,设定字符串类型键指定位置的二进制的值,如:SETBIT foo 7 1
BITCOUNT 命令可以获取字符串类型键中值是1的二进制的个数,如:BITCOUNT foo
同时还可以指定字节的范围,如果我们只想统计前两个字节的,如:BITCOUNT foo 0 1
BITTOP 命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。
如:SET foo1 bar
SET foo2 aar
BITTOP OR res foo1 foo2 ==>res 的结果是car
integer:
incr tresss;
incr 将 key
中储存的数字值增一,如果 key
不存在,那么 key
的值会先被初始化为 0
,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
desr trees;
INCRBY key increment ==>增加指定的整数;如: INCRBY bar 2
DECRBY key decrement==>减少指定的整数;如: DECRBY bar 2 等价于 INCRBY bar -2
INCRBYFLOAT key increment==>增加指定的浮点数;如:INCRBYFLOAT bar 2.7 或者 INCRBYFLOAT bar 5E+4
列表类型(LISTS)
列表类型( list )可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表( double linked list )实现的,所以向列表两端添加元素的时间复杂度为 0(1) ,获取越接近两端的元素速度就越快。这种特性使列表类型能非常快速地完成关系数据库难以应付的场景:如社交网站的新鲜事,我们关心的只是最新的内容,使用列表类型存储,即使新鲜事的总数达到几千万个,获取其中最新的 100 条数据也是极快的。同样因为在两端插入记录的时间复杂度是 0(1) ,列表类型也适合用来记录日志,可以保加入新日志的速度不会受到已有日志数量的影响。
列表两端增加元素
LPUSH key value [value]
RPUSH key value [value]
从两端弹出元素
LPOP key
RPOP key
获取列表片段(最常用命令之一)
LRANGE key start stop
numers ==> "2" "1" "0"
LRANGE numbers 0 2 ==>"2" "1" "0"
LRANGE numbers -2 -1 ==>"1" "0"
删除列表中指定的值
LREM key count value
LREM 命令会删除列表中前 count 个值为 value 的元素,返回值是实际删除的元素个数。根据 count 值的不同, LREM 命令的执行方式会略有差异:
- 当 count > 0 时 LREM 命令会从列表左边开始删除前 count 个值为 value 的元素;
- 当 count < 0 时 LREM 命令会从列表右边开始删除前 |count| 个值为 value 的元素;
- 当 count=0 是 LREM 命令会删除所有值为 value 的元素。如:
redis > RPUSH numbers 2
(integer) 4
redis > LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
4) "2"
# 从右边开始删除第一个值为 "2" 的元素
redis > LREM numbers -1 2
(integer) 1
redis > LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
获得/设置指定索引的元素值
LINDEX key index
LSET key index value
只保留列表指定片段
LTRIM key start end LTRIM 命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和 LRANGE 命令相同。就像这样:
redis > LRANGE numbers 0 -1
1) "1"
2) "2"
3) "7"
4) "3"
"0"
redis > LTRIM numbers 1 2
OK
redis > LRANGE numbers 0 1
1) "2"
2) "7"
LTRIM 命令常和 LPUSH 命令一起使用来限制列表中元素的数量,比如记录日志时我们希望只保留最近的 100 条日志,则每次加入新元素时调用一次 LTRIM 命令即可:
LPUSH logs newLog
LTRIM logs 0 99
散列类型(HASH类型)
Redis 是采用字典结构以键值对的形式存储数据的,而散列类型( hash )的键值也是一种字典结构,其存储了字段( field )和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。散列类型适合存储对象:使用对象类别和 ID 构成键名,使用字段表示对象的属性,而字段值则存储属性值。例如要存储 ID 为 2 的汽车对象,可以分别使用名为 color 、 name 和 price 的 3 个字段来存储该辆汽车的颜色 、名称和价格。存储结构如下:
赋值和取值
HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key filed [field...]
HGETALL key
注意:HSET命令不区分插入还是更新操作,这意味着修改数据时不用实现判断字段是否存在来决定是插入还是更新。当执行的是插入操作时,HSET命令返回值为1,当执行的是更新操作时,HSET命令的返回值是0。
hset car color white;
hmset car name aodi price 90;
hget car color;==>"white";
hmget car name price;==>"aodi 90"
hgetall myhash;==>"color" "white" "name" "aodi" "price" "90"
判断字段是否存在 HEXISTS
HEXISTS KEY field
如:HEXISTS car model ==>0 不存在
当字段不存在时赋值 HSETNX
HSETNX key field value
增加数字 HINCRBY
HINCRBY key field increment
如:HINCRBY person score 60 ==>之前person不存在的话,该语句的值为60
删除字段 HDEL
HDEL key field [field...]
如:HDEL car price
获取字段名
HKEYS key 如:HKEYS car ==>"color" "name" "price"
HVALS key 如:HVALS car==>"white" "aodi" "90"
获取字段数量
HLEN KEY 如:HLEN car ==> 3
集合类型
集合的话是存储不重复的键;
集合是用值为空的散列表(hash table)实现的,他利用了散列表字段唯一的特性实现了不重复的键的功能;
同样也是因为散列表的原因,集合类型的查找非常方便,只需要O(1)的复杂度。
增加/删除元素
SADD key member [member ...]
SREM key member [member ...]
获得集合中的所有元素
SMEMBERS key
判断元素是否在集合中
SISMEMBER key member
集合间的运算
SDIFF key [key ...] 求差。甚至可以是 SDIFF setA setB setC ==>setA -setB-setC
SINTER key [key ...] 求交。
SUNION key [key...] 求并。
求集合中元素个数
SCARD key
进行集合运算并将结果存储
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
sadd myset sky;
sadd myset moon;
sismember myset sky;判断 sky 元素是否集合 myst 的成员。是怎返回1 不是则返回0;
smembers myset;==>"key" "moon".返回集合 key
中的所有成员。
sinter myset myset2;求交集:求myset 和myset2的共同元素;
sdiff myset myset2;求差集:myset-myset2;
sunion myset myset2;求并集:myset U myset2;
sorted sets:
zadd z1 1 mon;
zadd z1 2 tur;
zadd z1 3 wen;
zscore z1 tur==>"2"
zcard z1==>"3
zrange z1递增排序
zrevrange z1 0 2==>"wen" "tur" "mon"
ZREVRANGE key start stop [WITHSCORES], 返回有序集 key
中,指定区间内的成员。其中成员的位置按 score
值递减(从大到小)来排列。具有相同 score
值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按 score
值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。
pub/sub:
Puber>publish ch1 "helloworld"==>2将信息 message
发送到指定的频道 channel。返回值为
接收到信息 message
的订阅者数量。
subscribe ch1
SUBSCRIBE channel [channel ...]订阅给定的一个或多个频道的信息。返回值如下:
redis管理:
auth :AUTH password==>通过设置配置文件中 requirepass
项的值(使用命令 CONFIG SET requirepass password
),可以使用密码来保护 Redis 服务器。如果开启了密码保护的话,在每次连接 Redis 服务器之后,就要使用 AUTH
命令解锁,解锁之后才能使用其他 Redis 命令。如果 AUTH
命令给定的密码 password
和配置文件中的密码相符的话,服务器会返回 OK
并开始接受命令输入。
ping :PING==>使用客户端向 Redis 服务器发送一个 PING
,如果服务器运作正常的话,会返回一个 PONG
。
select [number]:切换到指定索引的数据库;
quit:退出当前的连接;
dbsize:统计当前database的keys的数量;
info memory==>INFO [section]获取当前服务器的状态和统计。
section包括:Server/Client/memory/Persistence/Stats/Replication/CPU/keyspace;
save==>SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘,一般来说,在生产环境很少执行 SAVE 操作,因为它会阻塞所有客户端,保存数据库的任务通常由 BGSAVE 命令异步地执行。然而,如果负责保存数据的后台子进程不幸出现问题时, SAVE 可以作为保存数据的最后手段来使用。
bgsave==>在后台异步(Asynchronously)保存当前数据库的数据到磁盘,BGSAVE 命令执行之后立即返回 OK
,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
flushdb==>清空当前数据库中的所有 key。
flushall==>清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。此命令从不失败。
monitor==>监听所有redis服务器接收到的请求,实时打印出 Redis 服务器接收到的命令,调试用。
shutdown==>SHUTDOWN 命令执行以下操作:
- 停止所有客户端
- 如果有至少一个保存点在等待,执行 SAVE 命令
- 如果 AOF 选项被打开,更新 AOF 文件
- 关闭 redis 服务器(server)
SLAVEOF host port==>SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port
命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port
将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE
将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
HELP==>如:help asdd