Redis的五大数据类型
官网命令参考:http://redisdoc.com/
String(字符串)
字符串类型是Redis最基本的数据结构,首先键都是String类型,其他几种数据结构都是在String类型上建立的,字符串可以是简单字符串,也可以是复杂字符串(二进制的图片、视频、音频、XML)等等,但是最大值Value
不超过512MB
(1)追加值
append key value
127.0.0.1:6379> get k1 "3" 127.0.0.1:6379> append k1 12345 (integer) 6 127.0.0.1:6379> get k1 "312345"
(2)返回 key 所储存的字符串值的长度
strlen key
127.0.0.1:6379> strlen k1 (integer) 6
(3)累加1
incr key
如果不是整数会返回错误
127.0.0.1:6379> get k2 "4" 127.0.0.1:6379> incr k2 (integer) 5 127.0.0.1:6379> incr k2 (integer) 6 127.0.0.1:6379> get k2 "6"
(4)累减1
decr key
127.0.0.1:6379> get k2 "6" 127.0.0.1:6379> decr k2 (integer) 5 127.0.0.1:6379> decr k2 (integer) 4 127.0.0.1:6379> get k2 "4"
(5)指定递增
incrby key value
127.0.0.1:6379> get k2 "4" 127.0.0.1:6379> incrby k2 3 (integer) 7 127.0.0.1:6379> incrby k2 3 (integer) 10 127.0.0.1:6379> get k2 "10"
(6)指定递减
decrby key value
127.0.0.1:6379> get k2 "10" 127.0.0.1:6379> decrby k2 2 (integer) 8 127.0.0.1:6379> decrby k2 2 (integer) 6 127.0.0.1:6379> get k2 "6"
(7)获取Key的指定范围
getrange key a b
127.0.0.1:6379> get k1 "312345" 127.0.0.1:6379> getrange k1 0 3 "3123" 127.0.0.1:6379> getrange k1 0 -1 "312345"
从0到-1表示全部
(8)设置指定位置的字符
127.0.0.1:6379> setrange k1 0 aaa (integer) 6 127.0.0.1:6379> get k1 "aaa345"
(9)Setex 命令为指定的 key 设置值及其过期时间
Setex key seconds value
如果 key 已经存在, SETEX 命令将会替换旧的值
127.0.0.1:6379> get k2 "6" 127.0.0.1:6379> SETEX k2 60 10 OK 127.0.0.1:6379> ttl k2 (integer) 49 127.0.0.1:6379> get k2 "10"
(10)批量设置、获取值
mset k1 v1 k2 v2
mget k1 k2 k3
127.0.0.1:6379> mset k2 111 k3 222 k4 333 OK 127.0.0.1:6379> mget k2 k3 k4 1) "111" 2) "222" 3) "333"
如果已存在键,则都不会执行
Hash(哈希)
类似java里面的Map
,hash是一个键值对集合,
(1)hset、hget
用于为哈希表中的字段赋值、获取值
127.0.0.1:6379> hset user id 1 (integer) 1 127.0.0.1:6379> hget user id "1"
(2)hmset
Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中
127.0.0.1:6379> hmset customer id 10 name ylc age 22 OK 127.0.0.1:6379> hmget customer id name age 1) "10" 2) "ylc" 3) "22"
(3)hgetall
命令用于返回哈希表中,所有的字段和值
127.0.0.1:6379> hgetall customer 1) "id" 2) "10" 3) "name" 4) "ylc" 5) "age" 6) "22"
(4)hdel
删除某个字段
127.0.0.1:6379> hdel customer name (integer) 1
(5)hlen
获取元素个数
127.0.0.1:6379> hlen customer (integer) 2
(6)hexists
判断字段是否存在
127.0.0.1:6379> hexists customer name (integer) 0 127.0.0.1:6379> hexists customer id (integer) 1
(7)hkeys、hvals
获取所有key或者value
127.0.0.1:6379> hkeys customer 1) "id" 2) "age" 127.0.0.1:6379> hvals customer 1) "10" 2) "22"
(8)hincrby
用于为哈希表中的字段值加上指定增量值
127.0.0.1:6379> hincrby customer age 2 (integer) 24 127.0.0.1:6379> hincrby customer age 2 (integer) 26
(9)hincrbyfloat
用于为哈希表中的字段值加上指定浮点数增量值
127.0.0.1:6379> hset customer score 99.0 (integer) 1 127.0.0.1:6379> hincrbyfloat customer score 0.5 "99.5"
(10)hsetnx
用于为哈希表中不存在的的字段赋值,如果字段已经存在于哈希表中,操作无效
127.0.0.1:6379> hsetnx customer age 30 (integer) 0 127.0.0.1:6379> hsetnx customer money 30 (integer) 1
List列表
是一个简单的字符串链表,可以添加在元素的头部和尾部
(1)将一个或多个值插入到列表头部
lpush key v1 v2 v3
127.0.0.1:6379> lpush list 1 2 3 4 5 (integer) 5 127.0.0.1:6379> keys * 1) "list" 127.0.0.1:6379> lrange list 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1"
(2)将一个或多个值插入到列表尾部
127.0.0.1:6379> rpush list2 1 2 3 4 5 (integer) 5 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
(3)lpop顶部出栈、rpop底部出栈
127.0.0.1:6379> lrange list 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> lpop list "5" 127.0.0.1:6379> rpop list "1" 127.0.0.1:6379> lrange list 0 -1 1) "4" 2) "3" 3) "2"
(4)lindex
根据下标获取索引
127.0.0.1:6379> lindex list 0 "4" 127.0.0.1:6379> lindex list 1 "3" 127.0.0.1:6379> lindex list 2 "2"
(5)llen
数组长度
127.0.0.1:6379> llen list (integer) 3
(6)lrem key
删除多个vlue
127.0.0.1:6379> rpush list03 1 1 1 2 2 2 3 3 3 4 4 4 (integer) 12 127.0.0.1:6379> lrem list03 2 3 (integer) 2 127.0.0.1:6379> lrange list03 0 -1 1) "1" 2) "1" 3) "1" 4) "2" 5) "2" 6) "2" 7) "3" 8) "4" 9) "4" 10) "4"
(6)itrim
截取指定范围值
127.0.0.1:6379> lrange list03 0 -1 1) "1" 2) "1" 3) "1" 4) "2" 5) "2" 6) "2" 7) "3" 8) "4" 9) "4" 10) "4" 127.0.0.1:6379> ltrim list03 3 7 OK 127.0.0.1:6379> lrange list03 0 -1 1) "2" 2) "2" 3) "2" 4) "3" 5) "4"
(7)lset key index value
喜欢key下标
127.0.0.1:6379> lrange list03 0 -1 1) "2" 2) "2" 3) "2" 4) "3" 5) "4" 127.0.0.1:6379> lset list03 1 x OK 127.0.0.1:6379> lrange list03 0 -1 1) "2" 2) "x" 3) "2" 4) "3" 5) "4"
(8)linsert key before/after
替换值
127.0.0.1:6379> linsert list03 before x java (integer) 6 127.0.0.1:6379> lrange list03 0 -1 1) "2" 2) "java" 3) "x" 4) "2" 5) "3" 6) "4"
(9)rpoplpush
用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回
127.0.0.1:6379> lrange list 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 127.0.0.1:6379> rpoplpush list2 list "4" 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> lrange list 0 -1 1) "4" 2) "5" 3) "4" 4) "3" 5) "2"
list它是一个字符串链表,对头部尾部操作效率最高,如果值全部移除,对应键全部消失
Set(集合)
Set是String类型的无序集合,通过HashTable实现
(1)sadd
Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
127.0.0.1:6379> sadd set01 1 1 2 2 3 3 (integer) 3
(2)smembers
命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合
127.0.0.1:6379> smembers set01 1) "1" 2) "2" 3) "3"
(3)Sismember
判断成员元素是否是集合的成员
127.0.0.1:6379> sismember set01 1 (integer) 1 127.0.0.1:6379> sismember set01 4 (integer) 0
(4)scard
获取集合中元素个数
127.0.0.1:6379> scard set01 (integer) 3
(5)srem
删除集合元素
127.0.0.1:6379> srem set01 3 (integer) 1 127.0.0.1:6379> smembers set01 1) "1" 2) "2"
(6)srandmember
随机选出几个数
127.0.0.1:6379> sadd set02 2 3 4 5 6 7 8 9 (integer) 8 127.0.0.1:6379> srandmember set02 3 1) "5" 2) "4" 3) "9" 127.0.0.1:6379> srandmember set02 3 1) "5" 2) "3" 3) "2" 127.0.0.1:6379> srandmember set02 3 1) "5" 2) "4" 3) "6"
(7)spop
随机出栈
127.0.0.1:6379> smembers set02 1) "2" 2) "3" 3) "4" 4) "5" 5) "6" 6) "7" 7) "8" 8) "9" 127.0.0.1:6379> spop set02 "4" 127.0.0.1:6379> spop set02 "9"
(8)smove
将指定成员 member 元素从 source 集合移动到 destination 集合
127.0.0.1:6379> sadd set03 x y z (integer) 3 127.0.0.1:6379> smembers set03 1) "z" 2) "y" 3) "x" 127.0.0.1:6379> smove set02 set03 5 (integer) 1 127.0.0.1:6379> smembers set03 1) "z" 2) "y" 3) "5" 4) "x"
(9)sdiff
数组差集,在一个集合中但不在第二个
127.0.0.1:6379> sadd set01 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd set02 3 4 5 a b (integer) 5 127.0.0.1:6379> sdiff set01 set02 1) "1" 2) "2" 127.0.0.1:6379> sdiff set02 set01 1) "b" 2) "a"
(10)sinter
交集
127.0.0.1:6379> sinter set01 set02 1) "3" 2) "4" 3) "5"
(11)sunion并集
127.0.0.1:6379> sunion set01 set02 1) "b" 2) "a" 3) "5" 4) "4" 5) "3" 6) "2" 7) "1"
ZSet(有序集合)
(1)zadd
用于将一个或多个成员元素及其分数值加入到有序集当中
127.0.0.1:6379> zadd zset 60 v1 70 v2 80 v3 100 v5 (integer) 4
(2)zrange
返回有序集中,指定区间内的成员
127.0.0.1:6379> zrange zset 0 -1 1) "v1" 2) "v2" 3) "v3" 4) "v5"
(3)zrangebyscore
返回所有符合条件 x <= score <= y 的成员,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)
127.0.0.1:6379> zrangebyscore zset 60 90 1) "v1" 2) "v2" 3) "v3"
还可以进行分页
127.0.0.1:6379> zrangebyscore zset 60 90 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> zrangebyscore zset 60 90 limit 2 2 1) "v3"
(4)zrem
用于移除有序集中的一个或多个成员,不存在的成员将被忽略
127.0.0.1:6379> zrem zset v5 (integer) 1 127.0.0.1:6379> zrange zset 0 -1 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80"
(5)zcard
有序集的元素个数,否则返回0
127.0.0.1:6379> zcard zset (integer) 3
(6)zount
用于计算有序集合中指定分数区间的成员数量
127.0.0.1:6379> zcount zset 60 80 (integer) 3
(7)zrank
返回有序集中指定成员的排名
127.0.0.1:6379> zrank zset v2 (integer) 1
(8)zscore
成员的分数值
127.0.0.1:6379> zscore zset v2 "70"
(9)zrevrank
逆序获取下标值
127.0.0.1:6379> zrevrank zset v3 (integer) 0 127.0.0.1:6379> zrange zset 0 -1 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80"
(10)zrevrange
逆序遍历
127.0.0.1:6379> zrevrange zset 0 -1 1) "v3" 2) "v2" 3) "v1"
(11)zrevrangebyscore
返回有序集中指定分数区间内的所有的成员,从大到小排列
127.0.0.1:6379> zrevrangebyscore zset 90 60 1) "v3" 2) "v2" 3) "v1"
键(Key)通用命令
查询所有键:Keys *
127.0.0.1:6379> keys k? 1) "k1" 127.0.0.1:6379> keys * 1) "k1" 2) "myhash" 3) "key:__rand_int__" 4) "counter:__rand_int__"
判断键是否存在:exists key
127.0.0.1:6379> exists k1 (integer) 1
移动key:move key db
127.0.0.1:6379> move k1 2 (integer) 1 127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> keys * 1) "k1"
给Key设置过期时间:expire key seconds
127.0.0.1:6379[2]> expire k1 10 (integer) 1
查看剩余过期时间:ttl key
127.0.0.1:6379[2]> ttl k1 (integer) 6 127.0.0.1:6379[2]> ttl k1 (integer) -2
-1表示永不过期,-2表示已过期,过期之后数据库不再有
删除键:del key
127.0.0.1:6379> del k2 (integer) 1
删除成功会返回个数,删除一个不存在的会返回0
del a b c表示删除多个键
查看键的类型:type key
127.0.0.1:6379> type k1 string