首页 技术 正文
技术 2022年11月20日
0 收藏 738 点赞 2,575 浏览 9646 个字

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(四)— Redis的命令参考

: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表被放入元素以或超时

Redis(四)— Redis的命令参考

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形式

Redis(四)— Redis的命令参考

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可以是给定集合中的任意一个

Redis(四)— Redis的命令参考

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

Redis(四)— Redis的命令参考

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的类型是否正确,才会决定是否执行给定的命令,也就是命令与值类型是否匹配。

Redis(四)— Redis的命令参考

(2)多态命令

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

Redis(四)— Redis的命令参考

 

参考:

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893