
1、简述
数据类型也称数据对象,包含字符串对象(string)、列表对象(list)、哈希对象(hash)、集合对象(set)、有序集合对象(zset)。
2、String数据类型命令
string 类型是redis最基础的数据类型,为简单key-value结构,并且value不限制类型,可以是数字,字符,图片等序列化对象,value值最大不可超过512M。
string类型在使用中经常用作分布式session共享,计数器,验证码过期,基础数据的缓存等。
在java编码中使用都是使用封装好的jar包,如spring redis,jedis等等,当封装的方法名称与命令行直接操作大同小异,下面展示命令行使用:
命令 | 用法 | 描述 |
set |
SET key value [EX seconds] [PX milliseconds] [NX|XX] |
|
get | GET key |
|
mset | MSET key value [key value ...] |
|
mget | MGET key [key ...] |
|
setex | SETEX key seconds value |
|
setnx | SETNX key value |
|
psetex | SETEX key milliseconds value |
|
getset | GETSET key value |
|
strlen | STRLEN key |
|
append | APPEND key value |
|
setrange | SETRANGE key offset value |
|
getrange | GETRANGE key start end |
|
incr | INCR key |
|
incrby | INCR key increment |
|
incrbyfloat | INCRBYFLOAT key increment |
|
decr | DECR key |
|
decrby | DECRBY key decrement |
|
msetnx | MSETNX key value [key value ...] |
|
注:redis的命令无大小写区分,但key值严格区分大小写
参数:
- EX seconds ---- 设置过期时间为秒,例:EX 60
- PX milliseconds ---- 设置过期时间为毫秒,例:PX 1000
- NX ---- 只有当key值不存在时才设置
- XX ---- 只有当key值存在时才设置
3、list数据类型命令
list数据类型为key-value键值对结构,但是其value值的结构为list,类似java中的队列;左侧为表头,右侧为表尾;结构类似于java的Map<String,List<Object>>
list数据类型可以作为消息队列使用,还可以作为排名等的缓存,也可以作为缓存分页。
命令 | 用法 | 描述 |
lpush |
LPUSH key value [value ...] |
|
lpushx | LPUSHX key value |
|
rpush | ROUSH key value [value ...] |
|
rpushx | RPUSHX key value |
|
lpop | LPOP key |
|
rpop | RPOP key |
|
rpoplpush | RPOPLPUSH source destination |
|
lrem | LREM key count value |
|
llen | LLEN key |
|
lindex | LINDEX key index |
|
linsert | LINSER key BEFORE|AFTER pivot value |
|
lset | LSET key index value |
|
lrange | LRANGE key start end |
|
ltrim | LTRIM key start end |
|
blpop | BLPOP key [key ...] timeout |
|
brpop | BRPOP key [key ...] timeout |
|
brpoplpush | BRPOPLPUSH source destination timeout |
|
4、hash数据类型
hash表数据类型是key-value结构,但是key为String类型,而value的结构则是field-value结构;类似于java中的Map<Sring,Map<Stirng,Object>> 结构。
hash表数据结构中field-value 的最大存储个数是 232 - 1 个;主要用途是作为key-value对象类型的缓存,在value中存储这个对象,取用时便于还原对象。
命令 | 用法 | 描述 |
hset | HSET key field value |
|
hsetnx | HSETNX key field value |
|
hget | HGET key field |
|
hexists | HEXISTS key field |
|
hdel | HDEL key field [field ...] |
|
hlen | HLEN key |
|
hstrlen | HSTRLEN key field |
|
hincrby | HINCRBY key field increment |
|
hincrbyfloat | HINCRBYFLOAT key field increment |
|
hmset | HMSET key field value [field value ...] |
|
hmget | HMGET key field [field ...] |
|
hkeys | HKEYS key |
|
hvals | HVALS key |
|
hgetall | HGETALL key |
|
5、set数据类型
set数据类型为无序集合数据类型,且数据不重复;
集合类型经常用户存储一些集合类型的数据,如微博的所有粉丝,标签等数据;结构类似java中的HashSet。
命令 | 用法 | 描述 |
sadd | SADD key value [value ...] |
|
sismember | SISMEMBER key value |
|
spop | SPOP key |
|
srandmember | SRANDMEMBER key [count] |
|
srem | SREM key value [value ...] |
|
smove | SMOVE source destination value |
|
scard | SCARD key |
|
smembers | SMEMBERS key |
|
sinter | SINTER key [key ...] |
|
sinterstore | SINTERSTORE destination key [key ...] |
|
sunion | SUNION key [key ...] |
|
sunionstore | SUNIONSTORE destination key [key ...] |
|
sdiff | SDIFF key [key ...] |
|
sdiffstore | SDIFFSTORE destination key [key ...] |
|
6、zset数据类型
zset数据类型为有序集合类型,且集合内元素不重复;
有集合通常被用作排行榜等有时间顺序或其他顺序的缓存集和;类似于java中的hashTable
命令 | 用法 | 描述 |
zadd | ZADD key score member [score member ...] |
|
zscore | ZSCORE key member |
|
zincrby | ZINCRBY key increment member |
|
zcard | ZCARD key |
|
zcount | ZCOUNT key min max |
|
zrange |
ZRANGE key start stop [WITHSCORE] |
|
zrevrange | ZREVRANGE key start top [WITHSCORE] |
|
zrangebyscore | ZRANGEBYSCORE key min max [WITHSOCRE] [LIMIT offset count] |
|
zrevrangebyscore | ZREVRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count] |
|
zrank | ZRANK key member |
|
zrevrank | ZREVRANK key member |
|
zrem | ZREM key member [member ...] |
|
zremrangebyrank | ZREMRANGEBYRANK key start stop |
|
zremrangebyscore | ZREMRANGEBYSCORE key min max |
|
zrangebylex | ZRANGEBYLEX key min max [LIMIT offset count] |
|
zlexcount | ZLEXCOUNT key min max |
|
zremrangebylex | ZREMRANGEBYLEX key min max |
|
7、redis 操作相关命令
redis除了对五大数据类型的操作命令,还有一些系统命令,可以对这个数据库进行操作,如删除key,清空数据库,手动持久化等。
命令 | 用法 | 描述 |
keys | KEYS pattern |
|
del | DEL key [key ...] |
|
exists | EXISTS key |
|
expire | EXPIRE key seconds |
|
expireat | EXPIREAT key seconds-timestamp |
|
pexpire | PEXPIRE key milliseconds |
|
pexpireat | PEXPIREAT key milliseconds-timestamp |
|
move | MOVE key db |
|
randomkey | RANDOMKEY |
|
persist | PERSIST key |
|
type | TYPE key |
|
rename | RENAME key newkey |
|
renamenx | RENAMENX key newkey |
|
dbsize | DBSIZE |
|
flushdb | FLUSHDB |
|
flushall | FLUSHALL |
|
select | SELECT index |
|
swapdb | SWAPDB db1 db2 |
|
ttl | TTL key |
|
pttl | PTTL key |
|
事物相关命令 |
||
multi | MULTI |
|
exec | EXEC |
|
discard | DISCARD |
|
watch | WATCH key [key ...] |
|
unwatch | UNWATCH |
|
持久化相关命令 |
||
save | SAVE |
|
bgsave | BGSAVE |
|
bgrewriteaof | BGREWRITEAOF |
|
lastsave | LASTSAVE |
|
作为队列使用相关命令(发布订阅) |
||
publish | PUBLISH channel message |
|
subscribe | SUBSCRIBE channel [channel ...] |
|
psubscribe | PSUBSCRIBE pattern [pattern ...] |
|
unsubscribe | UNSUBSCRIBE channel [channel ...] |
|
punsubscribe | PUNSUBSCRIBE pattern [pattern ...] |
|
pubsub |
PUBSUB channels [pattern ...] |
|
注:redis内部命令还有很多,有些维护之类的命令再次不做介绍,如果用到,请参考redis官网。
8、总结
Redis的命令大体上可以分为两种,一种可以称为数据库级命令,可以对任何键值操作,如:DEL、TYPE等,第7节说到的基本都是;另一种是针对五大数据类型操作的,以上几节说道的基本都是。
(1)命令类型检查
命令的执行之前,Reddis会先检查输入的key的类型是否正确,才会决定是否执行给定的命令,也就是命令与值类型是否匹配。
(2)多态命令
如前一章说过四种数据对象每种都有两种编码方式,但在本章使用的命令确是一个;Redis在执行命令之前,会判断对象的编码方式,然后再执行对应的命令,这就是命令的多状态。
参考:
《Redis设计与实现》黄健宏著,网上对Redis的详解等
此博客为笔者使用redis很久之后,参考网络上各类文章总结性书写,原创手打,如有错误欢迎指正。