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]

  • 将key的值设置为value,如果key已经存在则覆盖value值,忽略类型
  • 当set命令带有过期时间,无论之前存在的key是否有过期时间,都会覆盖
get  GET key
  • 获取key设置的值,key不存在返回nil,value类型不是string返回错误
mset  MSET key value [key value ...]
  • 批量设置key-value值,如果key存在,则直接覆盖
  • 此操作为原子操作,所有值同一时间设置,不会出现某些值设置,某些值未设置的情况
mget  MGET key [key ...]
  • 批量返回key的值,如果不存在则返回nil
setex  SETEX key seconds value
  • 将key的值设置为value,并设置过期时间为seconds秒
  • 如果key存在,则直接覆盖,过期时间也设置为新的过期时间
setnx  SETNX key value
  • 将key的值设置为value,仅当key不存在时,如果key存在不做任何操作
  • 成功返回1,失败返回0
psetex  SETEX key milliseconds value
  • 将key的值设置为value,并设置过期时间为毫秒
  • 如果key存在,则直接覆盖,过期时间也设置为新的过期时间
getset  GETSET key value
  • 将key的值设置为value,并返回key之前设置的旧值,如果key不存在则返回nil,如果类型不退则返回错误
strlen  STRLEN key
  • 返回key的值的长度,当key不存在时返回0,当类型不对是,返回一个错误
append  APPEND key value
  • 如果key值已经存在,则把value值添加到原来的value值的末尾,如果不存在,设置key的值为value
setrange  SETRANGE key offset value
  • 从offset位开始,使用value值复写原来的key的value;如果key值不存在,当成空字符串处理
getrange  GETRANGE key start end
  • 返回key值对应的指定部分的字符串,从start开始到end结束,包含start与end
  • start与end为负数时从末尾开始计数,-1为倒数第一位,-2为倒数第二位
incr  INCR key
  • key对应的value数字加1,如果key不存在,则初始化为0后再加1
  • key的值不是数字,则返回错误
incrby  INCR key increment
  • key对应的value数字加增量increment,如果key不存在,则初始化为0后再加增量increment
  • key的值不是数字,则返回错误
incrbyfloat  INCRBYFLOAT key increment
  • key对应的value加浮点数增量increment,如果key不存在,则初始化为0后再加浮点数增量increment
  • key的值不是数字,则返回错误
decr  DECR key
  • key对应的value数字减去1,如果key不存在,则初始化为0后减去1
  • key的值不是数字,则返回错误
decrby  DECRBY key decrement
  • key对应的value数字减去减量decrement,如果key不存在,则初始化为0后再减去减量decrement
  • key的值不是数字,则返回错误
msetnx  MSETNX key value [key value ...]
  • 批量设置key的值,但仅当所有的key都不存在时才设置,任意一个key存在,都不设置
  • 原子操作,要么都这是,要么都不设置;这是成功返回1,设置不成功返回0

: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 ...]

  • 将一个或多个value插入表头,多个值的情况下,从左向右依次插入
  • key不存在则创建后再插入;key存在但value类型不对返回错误
lpushx   LPUSHX key value
  • 将value值插入表头,当且仅当key存在时,才插入
  • 插入成功返回list长度
rpush   ROUSH key value [value ...]
  • 将一个或多个value插入表尾,多个值的情况下,从左向右依次插入
  • key不存在则创建后再插入;key存在但value类型不对返回错误
rpushx   RPUSHX key value
  • 将value值插入表尾,当且仅当key存在时,才插入
  • 插入成功返回list长度
lpop   LPOP key
  • 移除并返回表头第一个元素
  • key不存在返回nil
rpop   RPOP key
  • 移除并返回表尾第一个元素
  • key不存在返回nil
rpoplpush   RPOPLPUSH source destination
  • 移除并返回source表的表尾第一个元素,将返回的元素插入destination表的表头
  • 如果source不存在,返回nil,不做其他操作
  • 命令为原子操作
lrem   LREM key count value
  • 根据count的值移除表中与value相等的元素
  • count > 0 ,从表头开始搜索,移除count 个与value值相等的元素
  • count < 0 ,从表尾开始走索,移除count 个与value值相等的元素
  • count = 0 ,移除全部与value值相等的元素
  • key不存在时,作为空表,返回值是移除的个数
llen   LLEN key
  • 返返回列表的长度,不存在返回0,类型不是列表,返回错误
lindex   LINDEX key index
  • 返回列表中下标为index的元素;负数为倒数元素,-1为倒数第一个
linsert   LINSER key BEFORE|AFTER pivot value
  • 将value值插入列表中,位于pivot的值之后或之前
  • 如果列表不存在,不做任何操作;如果类型不是列表,返回错误
lset   LSET key index value
  • 将列表中index位置的值替换为value
  • index超限,返回错误
lrange   LRANGE key start end
  • 返回列表中指定区间的元素,包含start与end;负数为倒数开始, -1 为倒数第一个元素
  • 下标超限问题,start 比列表长度大则返回空值,end比列表长度大,则返回start到列表的长度
ltrim   LTRIM key start end
  • 裁剪列表,保留start与end之间的元素,包含start及end,负数表示倒数开始,-1 为倒数第一个元素
blpop   BLPOP key [key ...] timeout
  • 在给定的列表中返回第一个不为空的列表的表头元素,如果都为空,则阻塞,直到超时或有列表被放入值
brpop   BRPOP key [key ...] timeout
  • 在给定的列表中返回第一个不为空的列表的表尾元素,如果都为空,则阻塞,直到超时或有列表被放入值
brpoplpush   BRPOPLPUSH source destination timeout
  • 阻塞式弹出source列表的表尾元素放入destination列表的表头位置,如果source表为空则阻塞,知道source表被放入元素以或超时

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 
  • 设置hash表中field的值为value;hash为空则创建后设置
  • field存在,则使用value替换旧值
hsetnx HSETNX key field value
  • 设置hash表中field的值为value,仅当field的值不存在时,才设置
  • 当field的值存在,则放弃操作;成功返回1,其他返回0
hget HGET key field
  • 获取hash表中field的值,如果hsah表不存在或field不存在,则返回nil
hexists HEXISTS key field
  • 判断hash表中是否存在field的值,存在返回1,不存在返回0
hdel HDEL key field [field ...]
  • 删除hash表中 field的值,field不存在则忽略
hlen HLEN key
  • 返回hash表中field的个数,简称hash表的长度
hstrlen HSTRLEN key field
  • 返回hash表中field对应的字符串的长度
hincrby HINCRBY key field increment
  • 将hash表中field的值增加增量increment,increment可以为负数,当field不存在则创建,并初始化为0后再增加
  • field存储的值是字符串时,返回错误
hincrbyfloat HINCRBYFLOAT key field increment
  • 将hash表中field的值增加浮点数增量increment,如果field不存在则创建,并初始化0后再增加
hmset HMSET key field value [field value ...]
  • 同时设置hash表中多个值,hash不存在则创建;field存在则替换
hmget HMGET key field [field ...]
  • 同时获取hash表中过个field的值,当field不存在时,返回nil
hkeys HKEYS key
  • 返回hash表中的所有的field,hash表不存在,返回空
hvals HVALS key
  • 返回hash表中的所有的field对应的值,hash表不存在,返回空
hgetall HGETALL key
  • 返回hash表中的所有field和值,返回结果是field-value,field-value形式

5、set数据类型

set数据类型为无序集合数据类型,且数据不重复;

集合类型经常用户存储一些集合类型的数据,如微博的所有粉丝,标签等数据;结构类似java中的HashSet。

命令 用法 描述
sadd SADD key value [value ...]
  • 将一个或多个value值添加到集合中,key不存在则创建,类型不是集合则返回错误
sismember SISMEMBER key value
  • 判断value是否是集合中的成员,是返回1,其他返回0
spop SPOP key
  • 随机移除并返回集合中的一个元素
srandmember SRANDMEMBER key [count]
  • 随机获取集合中的count个元素,count大于集合元素的数量则返回整个集合
srem SREM key value [value ...]
  • 移除集合中的一个或多个value值
smove SMOVE source destination value
  • 将source集合中的value元素移动到destination集合中,value在source中移除,如果value不存在则无操作
  • 成功返回1;无操作返回0;不是集合返回错误  
scard SCARD key
  • 返回集合中元素的数量,key不存在返回0
smembers SMEMBERS key
  • 返回集合中的所有元素,key不存在,返回空
sinter SINTER key [key ...]
  • 返回给定集合的交集,当key不存在视为空集
  • 当有一个空集,则返回的也是空集
sinterstore SINTERSTORE destination key [key ...]
  • 返回给定集合的交际并保存到destination中,destination可以是给定集合中的任意一个
sunion SUNION key [key ...]
  • 返回给定集合的并集,key不存在视为空集
sunionstore SUNIONSTORE destination key [key ...]
  • 返回给定集合的并集并保存到destination中,destination可以是给定集合中的任意一个
sdiff SDIFF key [key ...]
  • 返回给定集合的差集,key不存在视为空集
sdiffstore SDIFFSTORE destination key [key ...]
  • 返回给定集合的差集并保存到destination中,destination可以是给定集合中的任意一个

6、zset数据类型

zset数据类型为有序集合类型,且集合内元素不重复;

有集合通常被用作排行榜等有时间顺序或其他顺序的缓存集和;类似于java中的hashTable

命令 用法 描述
zadd ZADD key score member [score member ...]
  • 将一个或多个member元素及其score值放入zset中,score可以是整数获取双精度浮点数
  • 如果member存在,则更新其score值
zscore ZSCORE key member
  • 返回zset中member的score值
  • key不是有序集合或key不存在,返回nil
zincrby ZINCRBY key increment member
  • 为zset中的成员member的score值加上增量increment,increment可以是负数
  • key不存在或member不存在,则添加初始化0后加上增量
zcard ZCARD key
  • 返回有序集合的元素个数
zcount ZCOUNT key min max
  • 返回有序集合中member的score值在min和max之间的元素的个数,包含min和max
zrange

ZRANGE key start stop [WITHSCORE]

  • 返回有序集合中位置在start和stop之间的元素,包含start和stop;
  • WITHSCORE指定是否连score一起返回
zrevrange ZREVRANGE key start top [WITHSCORE]
  • 返回有序集合中位置在start和stop之间的元素,并且按照score从大到小排序,包含start和stop
zrangebyscore ZRANGEBYSCORE key min max [WITHSOCRE] [LIMIT offset count]
  • 返回有序集合中所有socre值在min和max之间的元素,并按照score从小到大排序,包含min和max
  • WITHSCORE指定是否连score一起返回
  • LIMIT指定返回的结果数量及区间,offset大时,会增加时间复杂度
zrevrangebyscore ZREVRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]
  • 参考上一条命令
  • 不同在于按照score值从大到小排序,score相同,按照member成员字典逆序排列
zrank ZRANK key member
  • 返回有序集合中member的score的排名,其中所有元素的score按照从小到大排列
zrevrank ZREVRANK key member
  • 返回有序集合中memner的score的排名,其中所有元素的score按照从大到小排列
zrem ZREM key member [member ...]
  • 移除有序集合中的一个或多个成员,member不存在则忽略
zremrangebyrank ZREMRANGEBYRANK key start stop
  • 移除有序集合中位置在start和stop之间的所有元素,包含start和stop;有序集合按照rank排序
zremrangebyscore ZREMRANGEBYSCORE key min max
  • 移除有序集合中元素的score值在min和max之间的所有元素,包含min和max
zrangebylex ZRANGEBYLEX key min max [LIMIT offset count]
  • 当有序集合内的所有元素score值都相同时,会根据成员字典顺序来排序,此命令则是返回符合min到max区间内的元素
  • min和max 有特殊值,- 号表示负无限,+ 号表示正无限;min和max必须包含开闭区间表示符()[],如 (c 表示不包含c
zlexcount ZLEXCOUNT key min max
  • 当有序集合的所有元素的score都相同时,会根据成员字典顺序来排序,此命令是返回符合min到max区间的元素的数量
  • min与max 的数值参考上一条zrangebylex
zremrangebylex ZREMRANGEBYLEX key min max
  • 当有序集合所有元素的score值都相同时,会移除min到max区间内的元素
  • min和max的数值参考命令 zrangebylex

7、redis 操作相关命令

redis除了对五大数据类型的操作命令,还有一些系统命令,可以对这个数据库进行操作,如删除key,清空数据库,手动持久化等。

命令 用法 描述
 keys  KEYS pattern
  • 返回所有符合条件的key值
  • pattern 可以使用通配符,?占一位,*占多位,[] 表示开头和结尾,特殊符号使用\转义
 del  DEL key [key ...]
  • 删除redis中一个或多个key,如果key不存在则跳过
 exists  EXISTS key
  • 判断key是否存在
 expire  EXPIRE key seconds
  • 设置key值的生存时间,单位是秒;如果key存在,则覆盖原生存时间
 expireat  EXPIREAT key seconds-timestamp
  • 设置key值的生存时间,以unix时间戳形式设置,时间戳表现形式为秒
 pexpire  PEXPIRE key milliseconds
  • 设置key值的生存时间,单位毫秒
 pexpireat  PEXPIREAT key milliseconds-timestamp
  • 设置key值的生存时间,以unix时间戳形式设置,时间戳表现形式为毫秒
 move  MOVE key db
  • 移动key值到指定的数据库db中,清除原来db中的key
 randomkey  RANDOMKEY
  • 随机生成一个key并返回,key不删除
 persist  PERSIST key
  • 移除key的有效时间,变成永久有效
 type  TYPE key
  • 查看key值类型,返回值:none、string、list、set、zset、hash、stream
 rename  RENAME key newkey
  • 重命名key
  • key不存在或key与newkey相同,返回错误;newkey已存在,覆盖原来的值
 renamenx  RENAMENX key newkey
  • 仅当newkey不存在时,才进行重命名key
 dbsize  DBSIZE
  • 查询当前数据库的key的数量
 flushdb  FLUSHDB
  • 清空当前数据库的所有key
 flushall  FLUSHALL
  • 清空redis内的所有key
 select  SELECT index
  • 切换到指定数据库,index是索引号,从0开始;默认使用的是0
 swapdb  SWAPDB db1 db2
  • 对换两个数据库
 ttl  TTL key
  • 查看key的剩余生存时间,单位秒
 pttl  PTTL key
  • 查看key的剩余生存时间,单位毫秒

事物相关命令

 multi  MULTI
  • 事物块开始标记,将多条命令顺序放入一个队列中,最后由exec开始原子性的执行
 exec  EXEC
  • 开始执行事物块内命令
 discard  DISCARD
  • 取消执行事务块内命令
 watch  WATCH key [key ...]
  • 监视一个或多个key,如过在事物执行之前,这个key被其他命令改动,则事物将被打断
 unwatch  UNWATCH
  • 取消所有监视

  持久化相关命令

 save  SAVE
  • 执行同步持久化命令,RDB形式保存数据快照到硬盘
  • 因为同步命令,所以执行时会阻塞所有客户端
 bgsave  BGSAVE
  • 异步执行持久化命令,RDB形式保存数据库快照到硬盘
  • 异步,会fork子进程执行命令,不会阻塞客户端
 bgrewriteaof  BGREWRITEAOF
  • 异步执行AOF持久化,AOF文件在命令执行成功之前不会重写。
  • AOF重写具有单线程性,即在命令执行时,如有子进程进行RDB操作,则其将排队等待,在RBD完成后执行;但如果是有其他AOF执行,则返回错误,不会排队
 lastsave  LASTSAVE
  • 返回最后一次持久化操作成功的时间,unix时间戳形式返回

 作为队列使用相关命令(发布订阅)

 publish  PUBLISH channel message
  • 发布消息到指定的channel
  • 返回的是订阅者的数量
 subscribe  SUBSCRIBE channel [channel ...]
  • 订阅一个或多个channel信息
 psubscribe  PSUBSCRIBE pattern [pattern ...]
  • 订阅一个或多个符合条件channel,pattern可以使用通配符
 unsubscribe  UNSUBSCRIBE channel [channel ...]
  • 取消订阅一个或多个channel的信息,退订
  • 当无参数时,退订所有
 punsubscribe  PUNSUBSCRIBE pattern [pattern ...]
  • 取消订阅一个或多个符合条件的channel信息,pattern可以使用通配符
 pubsub

PUBSUB channels [pattern ...]

  • 查看一个或多个channel订阅的者
  • pattern可以使用通配符

注:redis内部命令还有很多,有些维护之类的命令再次不做介绍,如果用到,请参考redis官网。

8、总结

Redis的命令大体上可以分为两种,一种可以称为数据库级命令,可以对任何键值操作,如:DEL、TYPE等,第7节说到的基本都是;另一种是针对五大数据类型操作的,以上几节说道的基本都是。

(1)命令类型检查

命令的执行之前,Reddis会先检查输入的key的类型是否正确,才会决定是否执行给定的命令,也就是命令与值类型是否匹配。

(2)多态命令

如前一章说过四种数据对象每种都有两种编码方式,但在本章使用的命令确是一个;Redis在执行命令之前,会判断对象的编码方式,然后再执行对应的命令,这就是命令的多状态。

 

参考:

《Redis设计与实现》黄健宏著,网上对Redis的详解等

此博客为笔者使用redis很久之后,参考网络上各类文章总结性书写,原创手打,如有错误欢迎指正。

Redis(四)--- Redis的命令参考的更多相关文章

  1. redis(四)redis与Mybatis的无缝整合让MyBatis透明的管理缓存

    redis的安装 http://liuyieyer.iteye.com/blog/2078093 redis的主从高可用  http://liuyieyer.iteye.com/blog/207809 ...

  2. Redis 命令参考

    Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html

  3. redis命令参考和redis文档中文翻译版

    找到了一份redis的中文翻译文档,觉得适合学习和查阅.这份文档翻译的真的很良心啊,他是<Redis 设计与实现>一书的作者黄健宏翻译的. 地址:http://redisdoc.com/i ...

  4. Redis命令参考之复制(Replication)

    Redis 支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品. ...

  5. Redis介绍及常用命令

    一 Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...

  6. redis 介绍和常用命令

    redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...

  7. redis的pub/sub命令

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 cha ...

  8. 四. Redis事务处理

    Redis目前对事务的支持还是比较简单,Redis能保证一个Client发起的事务中的命令可以连续执行,而中间不会插入其他Client的命令:当一个Client在连接中发起一个multi命令的时候,这 ...

  9. 【redis】redis常用命令及操作记录

    redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复. 它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop), ...

随机推荐

  1. STL函数static void (* set_malloc_handler(void (*f)()))()与函数指针解析

    在C++ STL的SGI实现版本中,一级空间配置器class __malloc_alloc_template中有一个静态函数的实现如下: static void (*set_malloc_handle ...

  2. Redi缓存注意事项

    缓存使用的场景 在一个高频访问的应用系统中,每次用户的请求需要去存储中获取数据,会对数据库造成很大的压力.容易导致数据库的奔溃.所以才会出现缓存来分担一部分的数据库的压力. 具体会产生数据库访问压力的 ...

  3. 手动实现 SpringMVC

    前几章我们已经分析了 Spring 的源码并且手动实现了一个 IOC/DI 容器. 这章我们在自己实现的 Spring 框架的基础上实现一个 SpringMVC 框架. 我们自己实现的 Spring ...

  4. spring 5.x 系列第5篇 —— 整合 mybatis + druid 连接池 (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 项目目录结构 1.创建maven工程,除了Spring基本依赖外,还需要导 ...

  5. ParrotSec 中文社区 QQ群认证 Openssl解密

    ParrotSec 中文社区 QQ群认证 Openssl解密 下载Key.txt 打开parrot 系统,复制文件到系统.打开命令行输入 openssl enc -aes-256-cfb -d -in ...

  6. C语言实现贪吃蛇

    日期:2018.9.11 用时:150min 项目:贪吃蛇(C语言--数组   结构体实现) 开发工具:vs2013 关键知识:数组,结构体,图形库,键位操作 源代码: #include<std ...

  7. TCP/IP 第三章

    1,ip协议不可靠.无连接特性介绍 不可靠:计算机A往计算机B发送数据报1,若途径的路由器缓存已满,或者ttl(time to live 生存周期)到了,则路由器直接丢弃数据包1,并产生icmp数据包 ...

  8. shell遍历文件

    取文件每行的数据,需要按列取  可以 sed 加管道 使用 awk 取列 platform="list.txt" line=`grep -vc '^$' $platform` ; ...

  9. java虚拟机-简介

    一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  10. Hive入门(四)查询优化

    1 本地模式 0.7版本后Hive开始支持任务执行选择本地模式(local mode). 大多数的Hadoop job是需要hadoop提供的完整的可扩展性来处理大数据的.不过,有时hive的输入数据 ...