五大数据类型
字符串:String
- String是Redis最基本的类型,一个Key对应一个Value
- String类型是二进制安全的,意思是Redis的String可以包含任何数据,例如一张jpg格式的图片或者一个序列化的对象
- 一个Redis的字符串类型Value最多可以是512M
列表:List
- 字符串列表,依照插入顺序排序
- 数据结构为链表
集合:Set
- String类型的无序集合
- 通过HashTable实现
哈希:Hash(类似于Java中的Map)
- 一个键值对集合
- hash是一个String类型的field和value的映射表,hash特别适用于存储对象
- 类似于Java中的Map(String,Object)
有序集合:Zset(sorted set)
- Zset和Set一样是String类型元素的集合,且不允许重复
- 与Set不同的是每一个元素前都会有一个double类型的分数
- 虽然元素是惟一的,但是分数可以重复
Redis常见数据类型操作命令
Redis键:Key
命令 |
作用 |
keys * |
获取当前数据库的所有key |
exists key |
判断指定的key是否存在,1代表存在,0代表不存在 |
expire key s |
为指定的key设定生命周期为s秒,s秒之后该key自动销毁 |
ttl key |
查看指定的key生命周期剩余时间,若为-1则永不过期,为-2则是已经过期 |
move key db |
将key移动到指定的数据库,并将当前库中的记录删除 |
del key |
删除指定的key |
Redis字符串:String
命令 |
作用 |
append key newValue |
在key对应的value后面追加值,追加的值为newValue |
strlen key |
获取key对应的value的长度 |
incr key |
将key对应的value的值加1,value的类型需要为int |
decr key |
将key对应的value的值减1,value的类型需要为int |
incrby key x |
将key对应的value的值加x,value的类型需要为int |
decrby key x |
将key对应的value的值减x,value的类型需要为int |
getrange key begin end |
截取并返回key对应的value的值,截取范围为[begin,end] |
setrange key index newValue |
将key对应value的指定范围内的值重置为newValue,范围的开始为index |
setex key s value |
添加key:value,生命周期为s秒 |
setnx key value |
如果key在当前数据库不存在则新增key:value |
mset |
批量增加key:value |
mget |
批量获取value |
msetnx |
批量设置,如果批量的key中有一个存在的,则全部都不能添加 |
代码示例
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> get k1
"2"
127.0.0.1:6379> incr k1
(integer) 3
127.0.0.1:6379> incrby k1 2
(integer) 5
127.0.0.1:6379> decrby k1 4
(integer) 1
127.0.0.1:6379> append k1 2345678
(integer) 8
127.0.0.1:6379> strlen k1
(integer) 8
127.0.0.1:6379> get k1
"12345678"
127.0.0.1:6379> getrange k1 0 3
"1234"
127.0.0.1:6379> setrange k1 0 xx
(integer) 8
127.0.0.1:6379> get k1
"xx345678"
127.0.0.1:6379> setex k2 10 v2
OK
127.0.0.1:6379> ttl k2
(integer) 6
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> setnx k3 v4
(integer) 0
127.0.0.1:6379> mset 1 1 2 2 3 3 4 4
OK
127.0.0.1:6379> mget 1 2 3 4
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> msetnx 5 5 6 6
(integer) 1
127.0.0.1:6379> msetnx 5 5 6 6
(integer) 0
127.0.0.1:6379>
Redis列表:List
命令 |
作用 |
lpush key [value] |
从左边开始将value压入列表key,相当于栈 |
rpush key [value] |
从右边开始将rtvalue压入列表key,相当于队列 |
lrange key start end |
从左边第start位到end位获取列表key的值,若end为-1相当于到列表尾部 |
lpop key |
弹出左边第一位的值 |
rpop key |
弹出右边第一位的值 |
lindex key i |
取出列表key左边第i为的值 |
llen key |
获取列表key的长度 |
lrem key n value |
删除列表key中n个value |
ltrim key begin end |
截取列表key从begin到end的值,再赋值给key |
rpoplpush k1 k2 |
取出k1的尾部添加到k2的头部 |
lset key index value |
将列表key的第index为赋值为value |
linsert key before/end i value |
在列表第i位之前/之后插入value |
Redis集合:Set
命令 |
作用 |
sadd key [value] |
增加一个set集合 |
smembers key |
列出集合key的所有元素 |
sismember key value |
判断value是否是集合key的一个元素 |
srandmember key n |
随机获取集合key的n的元素 |
spop key n |
随机弹出集合key的n个元素 |
srem key value |
删除集合key中value元素 |
smove k1 k2 value |
将集合k1中的元素移到k2 |
sunion k1 k2 |
求k1与k2的并集 |
sdiff k1 k2 |
求k1与k2的差集 |
sinter k1 k2 |
求k1与k2的交集 |
Redis哈希:Hash
命令 |
作用 |
hset key field value |
在哈希key中添加键值对key:value |
hget key field |
得到哈希key中键为field的值 |
hmset key [field value] |
在哈希key中批量设置键值对 |
hmget key [field] |
批量得到哈希key中的值 |
hgetall key |
得到哈希key中所有的键值对 |
hlen key |
得到哈希key的长度 |
hexists key field |
判断键field在哈希key中是否存在 |
hkeys key |
得到哈希key中所有的键 |
hvals key |
得到哈希key中所有的value |
hincrby key field n |
将哈希key中键为field的值加n |
hincrbyfloat key field x |
将哈希key中键为field的值加x,x可以是浮点数 |
hsetnx key field value |
在哈希key中添加键值对key:value,若key存在则添加失败 |
Redis有序集合:Zset
命令 |
作用 |
zadd key [score value] |
在有序集合Zset中添加 [分数 元素] |
zrange key start end |
遍历有序集合key中的元素 |
zrangebyscore key start end |
根据分数遍历有序集合Zset中的分数和元素 |
zrem key score |
根据分数删除有序集合Zset中的元素 |