简述
Redis遵守BSD协议,key-value数据库
优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
- 支持复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。所有操作都是原子性的,多个操作也支持事务,通过MULTI和EXEC指令包起来。支持 Strings, Lists, Hashes, Sets 及 Ordered Sets等多种数据结构。
- 支持master-slave模式的数据备份,还支持 publish/subscribe, 通知, key 过期等等特性
- 轻量一个空Redis实例占用的内在只有1M左右
配置文件及参数
- redis.windows.conf为win下配置文件,也可以通过CONFIG SET/GET
- 日志级别:debug、verbose、notice、warning,默认为 notice
- rdbcompression默认yes,采用LZF压缩
语法
常用
- exists key:是否存在
- §expire key 10:10s后过期,带P为毫秒
- §expireat key timestamp:某个时间后过期,带P为毫秒
- keys pattern:查找符合的 key
- persist key:移除过期时间
- §TTL key:time to live剩余时间,带P为毫秒
- RANDOMKEY:随机返回一个key
- rename key newkey:------newkey存在会被覆盖
- renamenx key newkey:newkey不存在时将key改为newkey
- auth “123456”:验证密码是否正确
服务器命令
- BGSAVE:异步保存数据到磁盘
- CLIENT LIST:客户端列表
- SHUTDOWN [NOSAVE] [SAVE]:异步保存/不保存到数据库,并关闭
- SLAVEOF host port:将当前服务器变为指定服务器的从属
数据类型
支持string、hash、list、set、zset;
- string,2进制安全,一个可以存储512m
getrange name 4 5:返回第5-第6个
getset key value:设置新值,并返回旧值
mget key key2:获取多个
incr key:加1
incrby key 5:加5
incrbyfloat key 5.0:加浮点数
decr/decrby类似
append key value:key存在,其value追加
- 每个 hash 可以存储 232 -1 键值对(40多亿)。
127.0.0.1:6379> del name
127.0.0.1:6379> HMSET name field1 "ydfind" field2 "ydfind1"
127.0.0.1:6379> HGET name field1
HGETALL key
HDEL key field
hexists key field
hkeys key:返回所有key
hvals key:返回所有值
hmget key field1 field2
hset key field value1:单个设置
- List双向列表,增删快
lpush name mongodb value2 value3
rpush name mysql
lrange name 0 10
blpop/brpop key1 timeout:移除获取第1或最后元素,没有的话,会阻塞
brpoplpush/rpoplpush source target timeout:元素移到另外一个列表,带b会阻塞
lindex key 2:根据索引取值
LINSERT mylist BEFORE/AFTER "World" "There":在值前或后插入
llen key:长度
lpop key:移除并获取第一个元素
LREM mylist -2 "hello":从尾开始移除2个hello
ltrim start stop:对表进行修剪
- Set为string的无序集合,通过哈希表实现,故增删查复杂度O(1)。
sadd key member
smembers key
scard key:数量
sdiff key1 key2:集合差集
sdiffstore dest key1 key2:差集保存
sunion key1 key2:并集
sinter key1 key2:交集
sismember key1 mem:是否是成员
smove key1 key2 mem:移动元素
spop key:移除并返回 随机一个数
srem key mem1, mem2:移除一个或多个元素
- Zset中member唯一,但score可以相同,更加score排序
zadd key score member
// 默认按score从小到大排序
zrangebyscore name -10 10
ZCARD key:成员数
ZCOUNT key min max:指定区间数量
ZRANGE runoobkey 0 10 WITHSCORES
ZRANK key member:返回指定成员索引
ZSCORE key member:返回成员分数
订阅
SUBSCRIBE mychannel channel2
SUBSCRIBE mychannel
punsubcribe channel:退订
PUBLISH mychannel "this is first talk"
事务
中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做
MULTI
...其他命令
EXEC
DISCARD:相当于回滚吧
备份保存
- SAVE:保存----------------安装目录下的dump.rdb
- BGSAVE:后台执行
127.0.0.1:6379> config get dir
1) "dir"
2) "C:\\WINDOWS\\system32"
恢复
将dump.rdb移到安装目录,重新启动客户端即可
安全
- config get requirepass:查看是否需要密码连接
- config set requirepass “123456”:设置密码
- redis-cli.exe -h 127.0.0.1 -p 6379 -a “123456”:登录时使用密码
性能测试
同时执行 10000 个请求来检测性能
C:\WINDOWS\system32>redis-benchmark -n 10000 -q
PING_INLINE: 1828.82 requests per second
PING_BULK: 1704.45 requests per second
SET: 1474.06 requests per second
GET: 1592.61 requests per second
INCR: 1645.82 requests per second
LPUSH: 1664.17 requests per second
LPOP: 1745.81 requests per second
SADD: 1820.17 requests per second
SPOP: 1815.87 requests per second
LPUSH (needed to benchmark LRANGE): 1855.98 requests per second
LRANGE_100 (first 100 elements): 1728.01 requests per second
LRANGE_300 (first 300 elements): 1676.73 requests per second
LRANGE_500 (first 450 elements): 1597.95 requests per second
LRANGE_600 (first 600 elements): 1210.95 requests per second
MSET (10 keys): 1639.34 requests per second
主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数
C:\WINDOWS\system32>redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q
SET: 1821.83 requests per second
LPUSH: 1807.01 requests per second
Redis 分区
分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。
不足
-
涉及多个key的操作通常是不被支持的。
-
涉及多个key的redis事务不能使用。
-
数据处理较为复杂。比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
-
增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。
-
范围分区
-
哈希分区。例如:key --(函数)–> 整数 --(%m余数)–> 映射到Rm实例;
其他
在线编辑器http://try.redis.io/