redis五种数据结构及常用命令

引言

Redis作为内存数据库,不仅性能强劲,而且具有 可扩展(主从复制和分片)、持久化(重启后可恢复之前数据)、内存存储(使得redis的速度很快)、远程(可和多个客户端打交道) 等特性,及支持存储五种数据类型的结构.
 以下是常见的数据库及缓存服务器对比
名称
类型
存储结构
其它功能
Redis
内存存储、非关系型DB
字符串、列表、集合、散列、有序集合
复制、持久化、分片、发布与订阅等
Mysql
关系型DB
表、视图等
支持主主、主从复制、ACID等
Memcached
内存存储的键值缓存
字符串键值对
多线程
MongoDB
硬盘存储、非关系型文档DB
支持主从复制、分片等

Redis支持的5种数据结构类型

结构类型
存储结构
操作
STRING
字符串、浮点数、整数
对字符串操作,支持浮点型或整型值的自增、自减
LIST
链表,链表上的每个节点包含一个字符串
链表两端推入或弹出元素,偏移,读取,移除元素
SET
字符串的集合,无序、不重复
添加,获取,移除,是否存在,交集,并集,差集等
HASH
键值对的无序散列表
获取,添加,移除等
ZSET
字符串成员、浮点数分值构成的有序映射,根据分值大小排序
添加,获取,移除,根据分值范围获取

字符串(STRING 有序、去重)

redis支持的字符串可以存储以下3种类型的值: 字节串、整数、浮点数
命令
用法及含义
INCR
INCR key-name     将键存储的值加上1
DECR
DECT key-name    将键存储的值减去1
INCRBY
INCRBY key-name num   将键存储的值加上增量num
DECRBY
DECRBY key-name num  将键存储的值减去num
INCRBYFLOAT
INCRBYFLOAT key-name num  将键存储的值加上浮点数num,redis版本高于2.6可用
注: 
1、当值被存进redis字符串时,redis会自动判断其类型,若不为整数或浮点数,执行INCR、DECR等命令会返回错误;
2、当上述命令操作的key-name不存在,或key-name为空串时,redis执行时会把key-name对应的value当作0处理;
3、INCR和DECR命令在某些场合下非常实用,例如 接口限流访问功能,redis缓存用户在指定时间内的访问次数直接加1即可

以下为redis处理子串和二进制位的命令
命令
用法及含义
APPEND
APPEND key-name value    追加到key-name存储的值末尾
GETRNGE
GETRANGE key-name start end   截取存储key-name的值的start-->end偏移量
SETRANGE
SETRANGGE key-name start end   设置存储key-name的值的start-->end偏移量
GETBIT
GETBIT key-name offset  将字符串看做二进制位串,并返回偏移量为offset的二进制位的值
注:
1、SETRANGE、SETBIT命令,若字符串长度不够,redis会自动填充空字节(null)来扩展至所需长度,然后再执行写入或更新操作;
2、GETRANGE命令,若长度超过实际长度,超过的长度会被视为空串;

列表(LIST  有序、可重复)

redis的列表常用命令
命令
用法及含义
RPUSH
RPUSH key-name value [……]    将一个或多个元素推入list的右端
LPUSH
LPUSH key-name value [……]    将一个或多个元素推入到list的左端
LPOP
LPOP key-name     移除list最右端的元素
RPOP
RPOP key-name     移除list最左端的元素
LINDEX
LINDEX key-name  offset     获取list偏移量为offset的元素
LRANGE
LRANGE key-name start end   获取list指定偏移量内的元素
LTRIM
LTRIM key-name start end    修剪list指定偏移量元素,不包含start/end位置元素
阻塞式的列表弹出及移动命令(常用在消息传递和任务队列中)
命令
用法及含义
BLPOP
BLPOP  key-name [key-name] timeout  从第一个非空列表中弹出位于最左端的元素或者在timeout时间内阻塞并等待可弹出的元素出现
BRPOP
BRPOP  key-name [key-name] timeout  从第一个非空列表中弹出位于最右端的元素或者在timeout时间内阻塞并等待可弹出的元素出现
RPOPLPUSH
BPOPLPUSH source-key dest-key   从source-key列表弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并返回这个元素
BRPOPLPUSH
BPOPLPUSH source-key dest-key  timeout   从source-key列表弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并返回这个元素;若source-key为空,则在timeout秒内阻塞并等待可弹出的元素出现

集合(SET  无序、不可重复)

以下为集合的常用命令
命令
用法及含义
SADD
SADD key-name item [item……]  将一个或多个元素添加至集合中,并返回被添加元素当中原本并不存在与集合里面的元素数量
SREM
SREM key-name item [item……]  从集合中移除一个或多个元素,并返回被移除的元素数量
SISMEMBER
SISMEMBER key-name item  判断item元素是否存在于集合中
SCARD 
SCARD key-name   返回集合包含的元素数量
SMEMBERS 
SMEMBERS key-name  返回集合key-name包含的所有元素
SPOP
SPOP key-name  随机的从集合key-name中语出一个元素,并返回这个元素
SMOVE
SMOVE source-key dest-key item  若source-key集合中包含item元素,则从source-keyz中移除item元素,并将item元素添加至集合dest-key中;若item元素被成功移除则此命令返回1,否则返回0
SRANDMEMBERS
SRANDMEMBERS key-name [num]  从集合key-name中随机返回一个或多个元素,当num为正数时,此命令返回的随机元素不会重复;若为负数,则此命令返回的可能会重复
用于处理和组合多个集合的redis命令
命令
用法及含义
SDIFF
SDIFF key-name [key-name……]  返回那些存在于第一个集合、但不存在有其他集合中的元素(差集)
SDIFFSTORE
SDIFFSTORE dest-key key-name [key-name……]  将那些存在于第一个集合、但并不存在于其他集合中的元素存储到dest-key键中
SINTER 
SINTER key-name [key-name]   返回那些同时存在于所有集合中的元素(交集)
SINTERSTORE
SINTERSTORE dest-key key-name [key-name……]  将那些同时存在于所有集合中的元素存储在dest-key键中
SUNION
SUNION key-name [key-name]  返回那些至少存在于一个集合中的元素(并集)
SUNIONSTORE
SUNIONSTORE dest-key key-name [key-name……]  将那些至少存在于一个集合中的元素存储至dest-key键中

散列(HASH 无序)

一些常用的redis散列命令


HMGET
HMGET key-name key [key……] 从散列表中获取一个或多个键的值
HMSET
HMSET key-name key value [key value……]  为散列里面的一个或多个键设置值
HDEL
HDEL key-name key [key……]  删除散列里面的一个或多个键值对,并返回成功找到并删除的元素数量
HLEN
HLEN key-name  返回散列包含的键值对的数量
一些高级redis散列命令
命令
用法及含义
HEXISTS
HEXISTS key-name key  检查key是否存在于key-name键名的散列中
HKEYS
KKEYS key-name  获取key-name散列包含的所有键
HVALS
HVALS key-name  获取key-name散列包含的所有值
HGETALL
HGETALL key-name  获取key-name散列包含的所有键值对
HINCRBY
HINCRBY key-name key num   给key-name散列中的key的值加上整数num
HINCRBYFLOAT
HINCRBYFLOAT key-name key num  给key-name散列中的key的值加上浮点数num
:  HGETALL命令取值时,可能因为一次性获取大体积的值而导致redis服务器阻塞,可以先用HKEYS命令取出所有键,再用HGET命令依次取值

有序集合(ZSET)

命令
用法及含义
ZADD
ZADD key-name score member [score member……]  将带有指定分值的成员添加到有序集合里面
ZREM
ZREM key-name member [member……]  从有序集合中移除指定的成员,并返回被移除的成员的数量
ZCARD
ZCARD key-name  返回有序集合包含的成员数量
ZINCRBY
ZINCRBY key-name increment member  将member成员的分值加上increment
ZCOUNT
ZCOUNT key-name min max  返回分值介于min和max之间的成员数量
ZRANK
ZRANK key-name member  返回成员member对应的分值在有序集合中的排名
ZSCORE
ZSCORE key-name member  返回成员member对应的分值
ZRANGE
ZRANGE key-name start end [WITHSCORES]   返回有序集合中分值排名介于start和end之间的成员;若给定了可选的,则此命令会将成员对应的分值也一并返回

命令
用法及含义
​ZREVRANK
ZREVRANK key-name member  返回有序集合立成员member的排名,成员按照分值从大到小排列
​​ZREVRANGE
ZREVRANGE key-name start end  返回有序集合给定排名范围的成员,成员按照分值从大到小排列
​ZRANGEBYSCORE
ZRANGEBYSCORE key min max  返回有序集合中,分值介于min和max之间的所有成员
ZREVRANGEBYSCORE
ZREVRANGEBYSCORE key max min  获取有序集合汇总,分值介于min和max之间的所有成员,并按其分值从大到小排列来返回它们
ZREMRANGEBYRANK
ZREMRANGEBYRANK key-name start end  移除有序集合中排名介于start和end之间的所有成员
ZREMRANGEBYSCORE
 ZREMRANGEBYSCORE key-name min max  移除有序集合中分值介于min和max之间的所有成员
ZINTERSTOR
ZINTERSTOR dest-key key-count key [key……]  [WEIGHTS weight [weight……]} [AGGREGATE SUM|MIN|MAX]   对给定的有序集合执行类似于集合的交集运算
ZUNIONSTORE
ZUNIONSTORE dest-key key-count key [key……]  [WEIGHTS weight [weight……]} [AGGREGATE SUM|MIN|MAX]   对给定的有序集合执行类似于集合的并集运算
更多命令参考: http://redis.io/commands
本文部分内容参考《Redis 实战》Josiah L. Carlson
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值