一,Key类型:
1. Del key 删除key
2. Dump key 返回key对应的序列化数据
3. Exsits key 判断key是否存在
4. EXPIRE key seconds 设置key的过期时间(秒)
5. Expireat key timestamp 设置key在指定的时间戳过期
6. PEXPIRE key milliseconds 设置key的过期时间(微秒)
7. PEXPIREAT key timestamp-milliseconds设置在指定的时间戳过期(精确到微秒)
8. Keys pattern 返回满足pattern的所有key(检索所有前缀key时非常有用)
9. Migrate host port keydestination-db timeout 迁移key
MIGRATE 127.0.0.1 6379 key2 0 1000
10. Move key db 将key移到db
Move key1 2
Select 2
dump key1
11. object refcount key 返回引用个数
object encoding key 返回key的类型
object idletime key 返回key空闲idle的时间,即从上次被访问到现在的时间(单位秒)
12. persist key 设置key永久化存储
13. pttl key 返回key的存活时间(微秒)
14. ttl key 返回key的存活时间(秒)
15. randomkey 从已经存在的key空间中,随机返回一个key
16. rename key newkey 重命名key
17. renamex key newkey 如果newkey不存在,重命名key
18. restore key ttl serialized-value将dump后序列化的数据重新存储(可以使用migrate命令)
19. sort key alpha 排序
sort list1 alphalimit 1 1 desc
sort list1 alphalimit 1 1 asc
20. type key 返回key的类型
21. scan cursor [match pattern][count count] 扫描所有的key,返回是数组,第一个为下一个cursor值,第二个为对于的key
127.0.0.1:6379> scan0 match k* count 2
1)"4"
2) 1)"k9"
127.0.0.1:6379>scan 4 match k* count 2
1)"5"
2) 1)"k3"
2) "k1"
127.0.0.1:6379>scan 5 match k* count 2
1)"0"
2) 1)"key1"
sscan hscan zscan 第一个参数是对应的key名,其他参数同上
sscan sets type
hscan hash type
zscan sorted sets type
二 string操作:
1. append key value 追加写,如果key不存在,则创建key,最好先判断key的类型
2. setbit key offset value 设置key对应offset偏移量的值
3. bitcount key [start end] 返回val中bit位为1的个数
bit使用场景
例如目前流行的签到功能
1号签到 setbit online_userid 1 1
3号签到 setbit online_userid 3 1
…….
可以根据偏移俩计算最近一个月的签到量,也可以展现用户签到的日期,存储非常小(存储一年只占365*1/8 = 46字节),且复杂度非常低O(1)
注:bitcount 中的start,end针对的是某一个字节,不是bit,所以计算最后一个月时,应该取 getrange key -4 -1,然后与0x7fffffff求and,最后计算bitcount
一周例子:
127.0.0.1:6379> get t
"@\xc0"
127.0.0.1:6379> getrange t -1 -1
"\xc0"
127.0.0.1:6379> set t-week"\xc0"
OK
127.0.0.1:6379> set t-week-mask"\x7f"
OK
127.0.0.1:6379> bitop and week t-weekt-week-mask
(integer) 1
127.0.0.1:6379> get week
"@"
127.0.0.1:6379> bitcount week
(integer) 1
127.0.0.1:6379>
4. get key 返回key值
5. bitop operation dest-key key1key2 key1和key2进行operation操作,然后存储到dest-key中,operation支持and,or,xor,not
6. bitpos key bit [start end] 返回val中第一个是bit(0 || 1)的位置
7. decr key 减1
8. decrby key decrement 指定步长减法
9. getbit key offset 获取bit位值
10. getrange key start end 获取指定区间的子字符串
11. getset key value 设置新值,返回老值
12. incr key 加1
13. incrby key increment 指定步长加法
14. incrbyfloat key increment 指定步长加法
15. mget key [key ..] 返回多个key对应的值
16. mset key value [key value …] 设置多个key
17. set key value [ex seconds] [pxmilliseconds] [nx|xx]
ex 有效时间秒
px 有效时间微秒
nx 不存在才set
xx 存在才set
18. setex key seconds value 设置key,且有效时间秒
19. psetex key milliseconds value 设置key,且有效时间为微秒
20. setnx key value 不存在key,才set
21. msetnx key value [key value…] 如果keys都不存在,才设置
22. setbit key offset value 设置bit位
23. strlen key 返回val长
24. setrange key offset value 设置偏移量对应的value
三 hash类型:
hash key 是区分大小写的
1. hset key field value 设置单个hash
2. hmset key field value [fieldvalue …] 设置多个hash
3. hget key field 获取特定field对应的值
4. hmget key field [field …] 获取多个field对应的值,没有的话返回nil
5. hgetall key 获取所有的field
6. hkeys key 获取key下面所有的field
7. hlen key 获取key下面field的个数
8. hexists key field 判断key下面是否存在field
9. hdel key field [field …] 删除key下面的field
10. hvals key 获取key下面所有的值
11. hsetnx key field value 当field不存在时,才创建
12. hscan key cursor [matchpattern] [count count] 返回匹配的field相关信息,但是自测count不起作用
13. 127.0.0.1:6379> HGETALL KEY1
14. 1) "F1"
15. 2) "V1"
16. 3) "F2"
17. 4) "V2"
18. 5) "F11"
19. 6) "V11"
20. 7) "F121"
21. 8) "V121"
22. 127.0.0.1:6379> hscan KEY1 0MATCH F1* COUNT 1
23. 1) "0"
24. 2) 1) "F1"
25. 2) "V1"
26. 3) "F11"
27. 4) "V11"
28. 5) "F121"
29. 6) "V121"
30. hincrby key field increment 自增
31. hincrbyfloat key fieldincrement 自增
32.
33. lists类型
34. blpop key [key …] timeout 将n个list进行left pop,但是timeout只支持秒级别,所以所有的key都没有数据,则会等待时间比较长,不利于引用
35. brpop key [key …] timeout 同上(right pop)
36. brpoplpush source destinationtimeout 备份用
37. lindex key index 根据索引获取值
38. linsert key BEFORE/AFTER PIVOTVALUE 在pivot值前/后插入新值
39. llen key 返回list长度
40. lpop key 从left pop一个value
41. lpush key value [value …] 从left插入n个value
42. lpushx key value 如果key对应的list存在,则push
43. lrange key start stop 取中间一段
44. lrem key count value 删除list中的值value
45. count 为0 则全部删除
46. count < 0 ,则从右删除count个
47. count > 0 ,则从左删除count个
48. ltrim key start stop 获取从start到end之间的元素
49. lset key index value 按索引创建元素
50. rpop key 从right pop元素
51. rpoplpush source destination 备份用
52. rpush key value [value …] 从right push元素
53. rpushx key value 只有key存在时才push
四sets类型 不会有重复的list
1. sadd key member [member …] 增加
2. scard key 返回member个数
3. sdiff key [key …] 返回存在第一个key但不存在其他key中的member
4. sdiffstore destination key [key…] 同sdiff,但是将结果存在destination里面,返回个数
5. sinter key [key …] 返回所有key的交集
6. sinterstore destination key[key …] 同sinter,但是将结果存在destination里面,返回个数
7. sismember key member 判断member是否存在
8. smembers key 返回所有的member
9. smove source destination member将member从一个set移动到另外一个set
10. spop key 随即返回一个member,并且删除
11. srandmember key [count] 返回随即n个member,并删除
12. srem key member [member …] 删除member
13.
14. sunion key [key …] 合并key
15. sunionstore destination key[key …] 同sunion ,但是存储到destination,返回个数
16. sscan key cursor [matchpattern] [count count] 同scan
五 sorted set类型
1. 指定顺序的set
2. zadd key score member [scoremember …] 增加,如果member已经存在,则会更新score的值,score为float类型
3. zcard key 返回member个数
4. zcount key min max 返回score在min和max之间的member个数
5. zincrby key increment member 计算member对应的score(加),如果member不存在,则增加一条记录
6. zinterscore destination numkeyskey [key …] [weights weight [weight …]] 计算所有key的交集,score按权重weights计算
六 hyperloglog类型
通过hyperloglog算法,计算基数的个数
1. pfadd key element [element …] 增加元素
2. pfcount key [key …] 计算个数
3. pfmerge destkey sourcekey[sourcekey …] 合并
七 pub/sub 类型
1. publish channel message 往channel message发送消息
2. subscribe channel [channel …] 订阅消息
3. pubsub channels pattern 返回所有有效的channel
4. pubsub numsub [channel …] 返回channel下面的订阅个数
5. pubsub numpat 返回模糊匹配channel的subscribe个数
6. psubscribe pattern [pattern…] 模糊订阅subscribe
7. unsubscribe channel [channel …]取消订阅
8. punsubscribe pattern [pattern …]取消模糊匹配
八 transaction 机制
1. multi开始transaction
2. exec结束transaction并提交
3. discard 结束transaction且不执行
4. watch key [key …] 监控key,在multi和exec执行过程中,如果key的值发送改变,整个transaction会失败
5. unwatch 取消监控,在multi和exec中使用,当运行过程中不需要监控key时,可以取消
6. 例子:
7. 端1:
8. 127.0.0.1:6379> watch k1
9. OK
10. 127.0.0.1:6379> multi
11. OK
12. 127.0.0.1:6379> set k1 cccc
QUEUED
127.0.0.1:6379>exec
(nil)
端2:
127.0.0.1:6379>set k1 dddd
OK
因为端1在transaction执行过程中,端2改变了k1的值,所以端1的transaction失败了
九 connection方法
1. ping 检测是否有效连接
2. select index 选择databases
3. quit 退出
4. echo message 打印信息
5. auth password 输入密码
十 server方法
1. dbsize 返回当前数据库中的key个数
2. time 返回当前时间
3. flushall 清空所有数据库的key
4. flushdb 清空当前database的key
5. info 返回redis的状态信息
6. config get parameter 获取redis.conf里面的参数内容,parameter支持正则表达式
7. config resetstat 重置info中stats的信息
8. lastsave 上一次保存的时间
9. monitor 监控日志,当不知道数据库发生啥时,可以用了当debug调试,但是性能会下降约50%,redis-benchmark压测(见最后)
10. client list 列出当前的client信息,
· Oneclient connection per line (separated by LF)
· Eachline is composed of a succession of property=value fields separated by a spacecharacter.
Hereis the meaning of the fields:
· addr:address/port of the client
· fd:file descriptor corresponding to the socket
· age:total duration of the connection in seconds
· idle:idle time of the connection in seconds
· flags:client flags (see below)
· db:current database ID
· sub:number of channel subscriptions
· psub:number of pattern matching subscriptions
· multi:number of commands in a MULTI/EXEC context
· qbuf:query buffer length (0 means no query pending)
· qbuf-free:free space of the query buffer (0 means the buffer is full)
· obl:output buffer length
· oll:output list length (replies are queued in this list when the buffer is full)
· omem:output buffer memory usage
· events:file descriptor events (see below)
· cmd:last command played
11. client kill ip:port 杀死客户端连接
12. client setname connection-name 设置当前client的名字
13. client getname 返回当前的client-name
14. client pause timeout 暂停服务timeout为微秒 ,可能的场景,主从延时,info返回的memory,replication信息做处理吧,暂时没想到其他场景
15. slaveof ip:port 挂载到slave
16. slave no one 变成master
十一 scripting 加载lua扩展功能
1. script load script 加载lua脚本,返回sha1
2. script exists script 判断是否存在
3. eval script numkeys key [key…]arg [arg…] 执行脚本
4. evalsha sha1 numkeys key [key…]arg [arg …] 执行sha1缓存的脚本
[root@AY140425180750358b92Z ~]# cat /tmp/1.lua
return'ok'
[root@AY140425180750358b92Z ~]# redis-cliscript load "$(cat/tmp/1.lua)"
"34f6a80fdc91746367dd8b572351df66b92c67ed"
127.0.0.1:6379> script exists 34f6a80fdc91746367dd8b572351df66b92c67ed
1) (integer) 1
127.0.0.1:6379> EVALSHA 34f6a80fdc91746367dd8b572351df66b92c67ed0
"ok"
127.0.0.1:6379> eval "return redis.call('get','k1')" 0
"dddd"
127.0.0.1:6379> eval "return redis.call('hget','s1','f1')" 0
"v1"
127.0.0.1:6379>eval 'return {KEYS[1],ARGV[1]}' 1 k1 v1
1)"k1"
2)"v1"
注:
redis压力测试,相当与ab压力工具:
redis-benchmark -c 10 -n 100000 –q