
#Redis入门
简介
Remote Dictionary Server (Redis)
Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。
它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。
截止到2015年6月27日,发布的最新稳定版本是3.0.2。
3.0版本最大的提升就是redis集群,一个分布式的redis示例具有数据自动分片和高容错性,以及在高负载的情况下的速度提升。
安装、配置
安装
下载路径: http://redis.io/download
1 | 安装命令 |
配置
redis的配置示例文件在%REDIS_HOME%下的redis.conf
里面包含很多默认配置
使用配置可以这样:$ redis-server /etc/redis/6379.conf
1 | daemonize 如果需要在后台运行,把该项改为yes |
详情可参考:http://t.cn/8kr3HUw
数据结构及其使用场景
1 string 字符类型
2 hash 散列类型
3 list 列表类型
4 set 集合类型
5 sorted set 有序集合
string 字符串类型
字符串类型是redis最基础的数据类型,是其他4中数据类型的基础。
| 命令 | 描述 | 示例 |
|---|---|---|
| SET key value | 赋值 | set foo 5 ==> OK |
| GET key | 取值 | get foo ==> “5” |
| INCR key | 递增.键不存在时创建并赋0,否则+1 | incr foo ==> 6 |
| DECR key | 递减 | decr foo ==> 5 |
| INCRBY key num | 与incr一样,不过可以指定增加的数值 | incrby foo 5 ==> 10 |
| APPEND key value | 追加,返回追加后字符串长度 | append foo 24 ==> 4 |
| STRLEN key | 长度 | strlen foo ==> 4 |
| MSET key value[ key value…] | 同时设置多个键值 | mset key1 1 key2 2 ==> OK |
| MGET key[ key…] | 同时获取多个键值 | mget key1 key2 ==>”1” “2” |
字符串就介绍到这里了,还有其他命令请自行看官方文档 😂😂😂
hash 散列类型
散列类型是一个键值数据结构,其值只能是字符串,也就是散列数据类型不支持嵌套其他数据类型。
| 命令 | 描述 | 示例 |
|---|---|---|
| HSET key field value | 设置或修改字段值 | hset user name frek ==> 1 |
| HGET key field | 获取字段值 | hget user name ==> “frek” |
| HMSET key field value[ field value..] | 同时设置多个字段 | hmset user name frek age 18 ==> OK |
| HMGET key field[ field..] | 同时获取多个字段值 | hmget user name age ==> “frek” “18” |
| HGETALL key | 获取键中所有字段和值 | hgetall user ==> “name” “frek” “age” “18” |
| HEXISTS key field | 判断字段是否存在,存在返回1,否则返回0(如果键不存在也返回0) | hexists user email ==> 0 |
| HSETNX key field value | 当字段不存在时赋值 | hsetnx user name sam ==> 0 ; HSETNX user email xxx@xxx.com ==> 1 |
| HINCRBY key field increment | 参考incrby命令 | hincrby user age 1 ==> 19 |
| HKEYS key | 获取键中所有字段名 | hkeys user ==> “name” “age” “email” |
| HVALS key | 获取所有的字段值 | hvals user ==> “frek” “19” “xxx@xxx.com“ |
| HLEN key | 获取字段数量 | hlen user ==> 3 |
| HDEL key field[ field..] | 删除一个或多个字段,返回删除的字段数 | hdel user email age ==> 2 |
list 列表类型
列表类型可以存储一个有序的字符串列表
| 命令 | 描述 | 示例 |
|---|---|---|
| LPUSH key value[ value..] | 向列表的左边增加元素,返回增加元素后列表的长度 | lpush users fred sam alice ==> 3 |
| RPUSH key value[ value..] | 向列表的右边增加元素 | rpush users carl lisa nicesu ==> 6 |
| LPOP key | 从列表左边移除一个元素,并返回该元素值 | lpop users ==> “fred” |
| RPOP key | 从列表的右侧移除一个元素,并返回该元素值 | rpop users ==> “nicesu” |
| LLEN key | 返回列表元素个数,键不存在时返回0 | llen users ==> 1 |
| LRANGE key start stop | 获取列表片段,start和stop支持负数,-1表示右数第一个 | lrange users 0 -1 ==> “sam” “alice” “carl” “lisa” |
| LREM key count value | 删除列表中指定的值,返回删除的元素个数 | lrem users 2 sam ==> 1 |
| LINDEX key index | 获取指定索引元素值 | lindex users 0 ==> “carl” |
| LSET key index value | 设置指定索引的元素值 | lset users 0 allen ==> OK |
| LTRIM key start end | 只保留列表指定片段,删除其他元素 | ltrim users 0 1 ==> OK |
| LINSERT key BEFORE/AFTER pivot value | 向列表插入元素,返回插入后列表长度 | linsert users after carl adam ==> 3 |
| RPOPLPUSH source destination | 将一个元素从一个列表转移到另一个列表,对source执行rpop,对destination执行lpush,返回被移动的元素值 | rpoplpush users usernames ==> “adam” |
集合类型
集合中的每个元素都不同,且没有顺序
| 命令 | 描述 | 示例 |
|---|---|---|
| SADD key member[ member..] | 增加一个或多个元素 | sadd tags one two three two ==> 3 |
| SREM key member[ member..] | 移除一个或多个元素 | srem tags two ==> 1 |
| SMEMBERS key | 获取集合中所有的元素 | smembers tags ==> “three” “one” |
| SISMEMBER key member | 判断元素是否存在集合中 | sismember tags one ==> 1 |
| SCARD key | 获取集合的元素个数 | scard tags ==> 2 |
| SRANDMEMBER key[ count] | 返回1个或count个随机元素 | srandmember tags ==> “one” |
| SDIFF key[ key..] | 集合差运算 | |
| SINTER key[ key..] | 集合交集运算 | |
| SUNION key[ key..] | 集合并集运算 |
有序集合类型
在集合类型的基础上有序集合类型为每个元素都关联了一个分数,这使我们可以使用集合类型的操作之外,还能做与分数有关的操作。
| 命令 | 描述 | 示例 |
|---|---|---|
| ZADD key score member[ score member..] | 增加一个带分数的元素,如果已存在,则替换分数 | zadd scoreboard 60 fred 89 parker 76 tony 59 nicesu ==> 4 |
| ZSCORE key member | 获得元素分数 | ZSCORE scoreboard nicesu ==> “59” |
| ZRANGE key start end[ WITHSCORES] | 获得排名在某个范围内的元素,返回按score升序排序的元素 | zrange scoreboard 0 -1 ==> “nicesu” “fred” “tony” “parker” |
| ZREVRANGE key start end[ WITHSCORES] | 与zrange使用一致,返回按score降序的元素 | zrevrange scoreboard 0 -1 withscores ==> “parker” “89” “tony” “76” “fred” “60” “nicesu” “59” |
| ZRANGEBYSCORE key min max[ WITHSCORES][LIMIT offset count] | 获得指定分数范围内的元素 | zrangebyscore scoreboard 60 100 ==> “fred” “tony” “parker” |
| ZREVRANGEBYSCORE key max min[ WITHSCORES][LIMIT offset count] | 获得指定分数范围内的元素,降序排序 | zrevrangebyscore scoreboard 100 60 ==> “parker” “tony” “fred” |
| ZINCREBY key increment member | 增加某个元素的分数 | zincrby scoreboard 1 nicesu ==> 60 |
| ZCARD key | 获取集合中元素个数 | zcard scoreboard ==> 4 |
| ZCOUNT KEY min max | 获得指定分数范围内的元素个数 | zcount scoreboard 80 100 ==> 1 |
| ZREM key member[ member..] | 删除一个或多个元素 | zrem scoreboard nicesu ==> 1 |
| ZRANK key member | 获取分数从小到大排序的位置 | zrank scoreboard parker ==> 2 |
| ZREVRANK key member | 同上 | zrevrank scoreboard parker ==> 0 |
| ZREMRANGEBYRANK key start stop | 按照排名范围删除元素 | |
| ZREMRANGEBYSCORE key min max | 按分数范围内删除元素 |
redis与node.js
#####安装:npm install redis
还可以安装C语言写的redis库npm install hiredis redis
如果安装了hiredis,node_redis会默认调用hiredis提供的库
#####示例:
1 | var redis = require("redis"), |
像mset可以多参数的命令,参数可以使用数组的方式传:client.mset(key1, val1, ... keyn, valn, [callback]);
等价于client.mset([key1, val1, ... keyn, valn], [callback]);
hmset可以接受多参数和对象client.hmset(hashkey, key1, val1, ... keyn, valn, [callback])
等价于client.hmset(hashkey, obj, [callback])
更多命令使用请参考: https://github.com/NodeRedis/node_redis 🐵