一.redis的五大数据类型
二.常用key的命令
Redis 五大数据类型有String 类型,Hash 类型,List 类型,Set 类型,Zset(Sortedset)类型。其中常用的是前三个。
官方提供的操作手册:http://redisdoc.com/
String 是 redis 最基本的类型,一个key对应一个value。
赋值:set key value
取值:get key
批量赋值:mset key value ... keyN valueN
批量取值:mget key ... keyN
取值并赋值:getset key value
删除key:del key ... keyN
数值加一:incr key
数值加N:incrby key n
数值减一:decr key
数值减N:decrby key n
字符串追加:append key value
字符串长度:strlen key
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"
127.0.0.1:6379> append k3 vv
(integer) 4
127.0.0.1:6379> get k3
"v3vv"
127.0.0.1:6379> strlen k2
(integer) 2
127.0.0.1:6379> strlen k3
(integer) 4
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> del k2 k3
(integer) 2
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> set k2 20
OK
127.0.0.1:6379> INCR k2
(integer) 21
127.0.0.1:6379> get k2
"21"
127.0.0.1:6379> INCRBY k2 20
(integer) 41
127.0.0.1:6379> get k2
"41"
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> APPEND k3 333
(integer) 5
127.0.0.1:6379> get k3
"v3333"
Redis hash 是一个键值对集合,和Java 的HashMap 类似。
Redis hash 是一个String 类型的 field 和 value 的映射表,hash特别适合用于存储对象(key 可以是对象+id,field 是对象属性,value则是属性值)。
给一个字段赋值:hset key field value
给多个字段赋值:hmset key field value ... fieldN valueN
取一个字段的值:hget key field
取多个字段的值:gmset key field ... fieldN
取所有的字段名和值:hgetall key
删除字段名和值:hdel key field ... fieldN
判断字段是否存在:hexists key field
获取key的所有field:hkeys key
获取key的所有value:hvals key
获取field个数:hlen key
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"
127.0.0.1:6379> append k3 vv
(integer) 4
127.0.0.1:6379> get k3
"v3vv"
127.0.0.1:6379> strlen k2
(integer) 2
127.0.0.1:6379> strlen k3
(integer) 4
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> del k2 k3
(integer) 2
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> set k2 20
OK
127.0.0.1:6379> INCR k2
(integer) 21
127.0.0.1:6379> get k2
"21"
127.0.0.1:6379> INCRBY k2 20
(integer) 41
127.0.0.1:6379> get k2
"41"
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> APPEND k3 333
(integer) 5
127.0.0.1:6379> get k3
"v3333"
Redis 列表是采用来链表来存储的简单字符串列表,按照插入顺序排序。添加元素一般从链表两端开始。
向列表左侧加元素:lpush key value ... valueN
向列表右侧加元素:rpush key value ... valueN
遍历列表:lrange key startIndex endIndex
获取List长度:llen key
通过下标获取值:lindex key index
通过下标设置值:lset key index value
列表左侧移除第一个元素:lpop key
列表右侧移除第一个元素:rpop key
截取保留剩下的列表:ltrim key startIndex endIndex
在制定元素插入值:linsert key after/before index value
把集合第一个元素移到其他集合中:rpoplpush key otherListKey
注:若endIndex=-1 表示最后一位;otherListKey 表示其他集合
127.0.0.1:6379> lpush list 1 2
(integer) 2
127.0.0.1:6379> rpush list 3 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "1"
3) "3"
4) "4"
127.0.0.1:6379> lpop list
"2"
127.0.0.1:6379> rpop list
"4"
127.0.0.1:6379> llen list
(integer) 2
127.0.0.1:6379> lindex list 1
"3"
127.0.0.1:6379> linsert list after 1 2
(integer) 3
127.0.0.1:6379> linsert list before 3 4
(integer) 4
127.0.0.1:6379> ltrim list 0 1
OK
127.0.0.1:6379> rpoplpush list newlist
"1"
Redis 的 Set 是String类型的无序集合。它是通过HashTable实现实现的,用法和 List 类型很相似。
新增集合元素:sadd key value ... valueN
删除集合元素:srem key value ... valueN
获取集合所有元素:smembers key
判断集合元素是否存在:sismember key value
集合差集:sdiff key1 key2
集合交集:sinter key1 key2
集合并集:sunion key1 key2
获取集合长度:scard key1
127.0.0.1:6379> SADD testset a b c d e
(integer) 5
127.0.0.1:6379> SMEMBERS testset
1) "c"
2) "b"
3) "d"
4) "a"
5) "e"
127.0.0.1:6379> SREM testset d e
(integer) 2
127.0.0.1:6379> SISMEMBER testset a
(integer) 1
127.0.0.1:6379> SISMEMBER testset d
(integer) 0
127.0.0.1:6379> sadd testsetb a b c e f
(integer) 5
127.0.0.1:6379> SDIFF testset testsetb
(empty list or set)
127.0.0.1:6379> SDIFF testsetb testset
1) "f"
2) "e"
127.0.0.1:6379> SINTER testset testsetb
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> SUNION testset testsetb
1) "f"
2) "a"
3) "e"
4) "b"
5) "c"
127.0.0.1:6379> SCARD testset
(integer) 3
127.0.0.1:6379>
Redis 的 zset(sorted set)和 set 一样也是string类型元素的集合,且不允许有重复的成员。不同的是 zset 的每个元素都会关联一个double类型的分数。zset正是通过分数来为集合中的成员进行排序。zset的成员是唯一的,但分数(score)却可以重复。
新增集合元素:zadd key score value ... scoreN valueN
获取元素分数:zscore key value
按照分数从小到大排序:zrange key startIndex endIndex
按照分数从大到小排序:zrevrange key startIndex endIndex
遍历时显示分数:withscores
统计分数比value少的个数:zrank key value
统计分数比value高的个数:zrevrank key value
输出分数在制定值内的元素:zrangebyscore key score1 score2
给元素加分:zincrby key score value
获取元素个数:zcard()
统计分数内的个数:zcount key score1 score2
删除制定排名内的元素:zremrangebyrank key no1 no2
删除指定分数内的元素:zremrangebyscore key score1 score2
删除指定元素:zrem key value
注: zcount 统计分数内的个数,score1 <= keyScore =< score2;zremrangebyrank 的 no1 和 no2 表示排名的第几位。
127.0.0.1:6379> zadd zset 65 A 67 C 66 B
(integer) 3
127.0.0.1:6379> zscore zset C
"67"
127.0.0.1:6379> zrange zset 0 -1
1) "A"
2) "B"
3) "C"
127.0.0.1:6379> zrevrange zset 0 -1
1) "C"
2) "B"
3) "A"
127.0.0.1:6379> zrevrange zset 0 -1 withscores
1) "C"
2) "67"
3) "B"
4) "66"
5) "A"
6) "65"
127.0.0.1:6379> zrank zset C
(integer) 2
127.0.0.1:6379> zrevrank zset C
(integer) 0
127.0.0.1:6379> zrangebyscore zset 65 66
1) "A"
2) "B"
127.0.0.1:6379> zrangebyscore zset 65 66 limit 1 2
1) "B"
127.0.0.1:6379> zincrby zset 10 A
"75"
127.0.0.1:6379> zcard zset
(integer) 3
127.0.0.1:6379> zcount zset 65 66
(integer) 1
127.0.0.1:6379> zremrangebyrank zset 0 1
(integer) 2
127.0.0.1:6379> zremrangebyscore zset 100 200
(integer) 0
127.0.0.1:6379> zrem zset A
(integer) 1