Redis有很多命令,下面是一些命令列表:
DECR, DECRBY, DEL, EXISTS, EXPIRE, GET, GETSET, HDEL, HEXISTS, HGET, HGETALL, HINCRBY, HKEYS, HLEN, HMGET, HMSET, HSET, HVALS, INCR, INCRBY, KEYS, LINDEX, LLEN, LPOP, LPUSH, LRANGE, LREM, LSET, LTRIM, MGET, MSET, MSETNX, MULTI, PEXPIRE, RENAME, RENAMENX, RPOP, RPOPLPUSH, RPUSH, SADD, SCARD, SDIFF, SDIFFSTORE, SET, SETEX, SETNX, SINTER, SINTERSTORE, SISMEMBER, SMEMBERS, SMOVE, SORT, SPOP, SRANDMEMBER, SREM, SUNION, SUNIONSTORE, TTL, TYPE, ZADD, ZCARD, ZCOUNT, ZINCRBY, ZRANGE, ZRANGEBYSCORE, ZRANK, ZREM, ZREMRANGEBYSCORE, ZREVRANGE, ZSCORE
我们可以使用 SET 命令存储键值对 key "server:name" value "fido"
SET server:name "fido"
Redis将会永久的存储数据,所以我们可以问Redis"这个键server:name里面存的是啥啊?"它会回答"fido".
GET server:name => "fido"
SET connections 10
SETNX connections 15
INCR connections => 11
INCR connections => 12
DEL connections
INCR connections => 1
x = GET count
x = x + 1
SET count x
是的,如果在单用户下这么做是没有问题的,但是如果有两个用户同时对这个键进行访问:
Client A reads count as 10.
Client B reads count as 10.
Client A increments 10 and sets count to 11.
Client B increments 10 and sets count to 11.
事实上该键被加了2次,我们想要的结果是12,但是返回的是11.出现这种问题是因为这种操作不是原子性[atomic operation]的.而调用 INCR 命令则不会有这个问题,因为 INCR 是原子操作.Redis提供了很多这种原子操作在不同的数据类型中.
我们可以设置Redis的键的有效存在时间,通过使用EXPIRE & TTL 这两个命令.
SET resource:lock "Redis Demo"
EXPIRE resource:lock 120
TTL resource:lock => 113
// after 113s
TTL resource:lock => -2
SET resource:lock "Redis Demo 1"
EXPIRE resource:lock 120
TTL resource:lock => 119
SET resource:lock "Redis Demo 2"
TTL resource:lock => -1
RPUSH 把一个新的值放到list末尾.
RPUSH friends "Alice"
RPUSH friends "Bob"
LPUSH friends "Sam"
LRANGE friends 0 -1 => 1) "Sam", 2) "Alice", 3) "Bob"
LRANGE friends 0 1 => 1) "Sam", 2) "Alice"
LRANGE friends 1 2 => 1) "Alice", 2) "Bob"
LLEN 返回当前list的长度
LLEN friends => 3
LPOP 移除list的第一个元素并返回该元素的值
LPOP friends => "Sam"
RPOP 移除list的最后一个元素并返回该元素的值
RPOP friends => "Bob"
现在list的状态呢O(∩_∩)O~
LLEN friends => 1
LRANGE friends 0 -1 => 1) "Alice"
SADD, SREM, SISMEMBER, SMEMBERS & SUNION.
SADD 给set新加一个给定值
SADD superpowers "flight"
SADD superpowers "x-ray vision"
SADD superpowers "reflexes"
SREM 从set中移除给定值的元素
SREM superpowers "reflexes"
SISMEMBER superpowers "flight" => 1
SISMEMBER superpowers "reflexes" => 0
SMEMBERS 列出set中所有的元素
SMEMBERS superpowers => 1) "flight", 2) "x-ray vision"
SADD birdpowers "pecking"
SADD birdpowers "flight"
SUNION superpowers birdpowers => 1) "pecking", 2) "x-ray vision", 3) "flight"
ZADD hackers 1940 "Alan Kay"
ZADD hackers 1906 "Grace Hopper"
ZADD hackers 1953 "Richard Stallman"
ZADD hackers 1965 "Yukihiro Matsumoto"
ZADD hackers 1916 "Claude Shannon"
ZADD hackers 1969 "Linus Torvalds"
ZADD hackers 1957 "Sophie Wilson"
ZADD hackers 1912 "Alan Turing"
ZRANGE hackers 2 4 => 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman" [已经按照score排序]
上面我们学习了 strings, sets & sorted sets, 此外Redis也能处理Hashes.
Hashes是一个maps有一个String字段以及string值,它在展示对象类型的数据[eg: A User with a number of fields like name, surname, age, and so forth]有着不小的优势.
HSET user:1000 name "John Smith"
HSET user:1000 email "john.smith@example.com"
HSET user:1000 password "s3cret"
使用 HGETALL 保存上面的数据
HGETALL user:1000
我们也可以使用一步到位的方式
HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"
如果我们想取出刚刚设置的值
HGET user:1001 name => "Mary Jones"
HGET user:1001 email => "mjones@example.com"
如果hash类型里的字段是数字类型[Numerical values],它们跟普通字符[simple strings]的处理是相同的,如果想要增加数字类型的值,hash提供了以原子的方式实现这种操作的命令.
HSET user:1000 visits 10
HINCRBY user:1000 visits 1 => 11
HINCRBY user:1000 visits 10 => 21
HDEL user:1000 visits
HINCRBY user:1000 visits 1 => 1
Complete!
-.-