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. springmvc拦截请求

    springmvc.xml <!--拦截请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 要拦截的请求类型 / ...

  2. spring boot单元测试之MockMvc

    spring单元测试之MockMvc,这个只是模拟,并不是真正的servlet,所以session.servletContext是没法用的. @RunWith(SpringRunner.class) ...

  3. 记录 nginx和php安装完后的URL重写,访问空白和隐藏index.php文件的操作方法

    sudo cd /etc/nginx/; sudo vi fastcgi_params; 1.URL重写 如果你的url参数不是用?xxx传递,而是自定义的,比如用/xx/xx/xx的方式传递,那么在 ...

  4. Windows下OSGEarth的编译过程

    目录 1. 依赖 1) OpenSceneGraph 2) GDAL 3) CURL 4) GEOS 5) 其他 2. 编译 1) 设置参数 2) 配置路径 3) 生成编译 3. 参考文献 1. 依赖 ...

  5. pip与conda的区别

    pip和conda到底有什么不一样? 今天看到我的foreman开始报错去询问才发现.我们的python包管理工具已经从pip整体迁移到了conda..最近的迁移真的非常多..前端也在迁移打包 跟着发 ...

  6. 解决IE8placeholder属性问题

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. chromedriver配置

    需要先安装chrome浏览器,添加chrome源 sudo vim /etc/yum.repos.d/google-chrome.repo 添加以下内容 [google-chrome] name=go ...

  8. 基于STM32之UART串口通信协议(二)发送

    一.前言 1.简介 在上一篇UART详解中,已经有了关于UART的详细介绍了,也有关于如何使用STM32CubeMX来配置UART的操作了,而在该篇博客,主要会讲解一下如何实现UART串口的发送功能. ...

  9. 利用mapWithState实现按照首字母统计的有状态的wordCount

    最近在做sparkstreaming整合kafka的时候遇到了一个问题: 可以抽象成这样一个问题:有状态的wordCount,且按照word的第一个字母为key,但是要求输出的格式为(word,1)这 ...

  10. 驰骋工作流引擎-CCMobile与安卓、IOS集成过程中的问题与解决方案

    CCMobile与安卓.IOS集成过程中的问题与解决方案 前言: CCMobile(2019版本)是CCFlow&JFlow 的一款移动端审批的产品.系统基于mui框架开发,是一款可以兼容An ...