美文网首页
Redis-2.数据类型和命令

Redis-2.数据类型和命令

作者: 王南北丶 | 来源:发表于2018-11-28 20:13 被阅读0次

    本文地址:https://www.jianshu.com/p/9942f1d65adc

    一、简介

    Redis之中,使用的是key-value来存储数据,但实际上,Redis并不是一个简单的键值对存储数据库。在key-value中的value,不仅仅可以存储字符串,还可以支持多种数据结构,这使得Redis中的键值对,其所扮演的角色其实与关系型数据库中的表类似。

    Redis中主要支持五种常见数据类型:

    1. String - 二进制安全的字符串类型,可以存储文本,图片等信息。
    2. List - 基本上是一个存储字符串元素的双向链表。
    3. Hash - 哈希类型,是由键值对组成的集合。里面存储的键值对的keyvalue都是字符串类型。
    4. Set - 元素唯一且无序的集合类型。
    5. Sorted Set - 一个有序的集合,顺序由插入时的浮点数分数决定。

    二、Key

    Redis存储的键值对中的key,是二进制安全的,也就是说你既可以使用普通的字符串来做key,也可以使用二进制的数据,例如图片,甚至空字符也是有效的。

    但是依然有几条规则需要遵守:

    1. 同一个数据库中的key不可重名。
    2. key的最大值为512MB。
    3. key不应该过长。这不仅仅是因为内存上的考虑,当key过长时,查询等命令将会因为key过长而花费更多的时间在key的比较上。
    4. key同样不应该太短。key的命名同样需要考虑可读性,例如"user:1000:followers"就比"u1000flw"好,需要在key命名的长度上找到一个平衡点。

    在Redis中,基本上每种数据类型都有自己独特的命令,这部分命令是不能混着用的。但是也有一部分命令是每个类型的key都可以使用的。

    命令

    命令 作用
    DEL key key存在时删除key
    EXISTS key 检查key是否存在
    TYPE key 查看key的类型
    RENAME key newkey 将key重命名
    RENAMENX key newkey 只有当newkey不存在时,才进行重命名
    KEYS pattern 查找key
    RANDOMKEY 从当前数据库随机获取一个key
    MOVE key db 将这个key移动到指定的另一个数据库
    DUMP key 序列化key,并返回被序列化的值
    EXPIRE key second 以秒为单位给key设定过期时间
    PEXPIRE key milliseconds 以豪秒为单位给key设定过期时间
    EXPIREAT key timestamp 把一个时间戳设置为key的过期时间
    PEXPIREAT key mill-timestamp 把一个毫秒级别的时间戳设置为key的过期时间
    PERSIST key 移除key的过期时间
    TTL key 以秒为单位返回key的过期时间
    PTTL key 以豪秒为单位返回key的过期时间

    三、String类型

    字符串类型时Redis中最为基础的类型,且是二进制安全的,所以可以存储字符串、图片、数字等各种数据。

    如果字符串中存储的为纯数字的话,还可以做一定的简单计算。

    命令

    命令 作用
    SET key value 给key设定或更新值
    SETNX key value 只有当key不存在时才给key设定值
    SETEX key second value 给key设定值,并且设定一个秒为单位的过期时间
    PSETEX key milliseconds value 给key设定值,并且设定一个豪秒为单位的过期时间
    SETRANGE key offset value 从offset开始,覆盖key的一部分
    MSET key value [key value ...] 同时设置多个键值对
    MSETNX key value [key value ...] 仅当列出的key都不存在时,同时设置多个键值对
    GET key 获取key的value
    MGET key1 [key2..] 一次获取多个key的value
    GETSET key value 给key设定一个新的value,获取旧的value并返回
    GETRANGE key start end 获取value中指定位置的内容
    STRLEN key 返回key中value的长度
    APPEND key value 将值添加到
    INCR key 将key存储的数字加1
    INCRBY key increment 将key存储的数字加上指定的数值
    INCRBYFLOAT key increment 将key存储的数字加上指定的浮点数数值
    DECR key 将key存储的数字减1
    DECRBY key decrement 将key存储的数字减去指定的数值

    四、List类型

    简单来说,Redis的List基本上就是一个双向链表,可以分别在头部或者尾部添加删除数据,每一个List类型的key最多可以存储4294967295个元素。

    基于这样的特性,Redis中的List常常被用来做消息队列之类的事情。

    命令

    命令 作用
    LPUSH key value1 [value2] 在List头部插入一个或多个值
    RPUSH key value1 [value2] 在List尾部插入一个或多个值
    LPUSHX key value 在List头部插入一个或多个值,key不存在则报错
    RPUSHX key value 在List尾部插入一个或多个值,key不存在则报错
    LPOP key 移除并返回List头部第一个元素
    RPOP key 移除并返回List尾部最后一个元素
    RPOPLPUSH source destination 移除列表尾部最后一个元素,添加到另一个列表头部
    LINDEX key index 根据列表索引查看元素的值
    LLEN key 查看List的长度
    LRANGE key start stop 查看一定索引范围内的元素
    LREM key count value 删除等于value的元素,如果count为0,则删除所有相等元素
    LINSERT key BEFORE|AFTER pivot value 将value插入到列表中,位于pivot之前或之后
    LSET key index value 根据index指定修改元素
    LTRIM key start stop 切片裁剪List
    BLPOP key1 [key2 ] timeout 移除并返回列表头部第一个元素,如果没有元素则阻塞列表直到有元素为止
    BRPOP key1 [key2 ] timeout 移除并返回列表尾部最后一个元素,如果没有元素则阻塞列表直到有元素为止
    BRPOPLPUSH source destination timeout 移除列表尾部最后一个元素,添加到另一个列表头部,如果没有元素则阻塞列表直到有元素为止

    五、Hash类型

    Redis的Hash类型则跟人们所期望的传统'hash'类型基本相同,是一个由field-value键值对组成的集合。其中fieldvalue都是字符串类型。

    众所周知,hash类型都非常适合用于保存对象。而且值得注意的是,大小较小的hash(元素较少、值比较短)以特殊的方式存储在内存中,使得其读写效率非常之高。

    命令

    命令 作用
    HSET key field value 添加或修改一个字段的值
    HMSET key field1 value1 [field2 value2 ] 同时添加或修改一个或多个字段的值
    HSETNX key field value 只有当字段不存在时,才添加一个字段的值
    HLEN key 获取所有字段的数量
    HSTRLEN key field c查看key中指定字段的value的长度
    HEXISTS key field 查看字段是否存在
    HDEL key field1 [field2] 删除一个或多个字段
    HGET key field 获取某一个字段的值
    HMGET key field1 [field2] 获取一个或多个字段的值
    HKEYS key 获取一个key中所有的field
    HVALS key 获取一个key中所有的value
    HGETALL key 获取一个key中所有field和value
    HINCRBY key field increment 给指定字段的value加上指定的increment数值
    HINCRBYFLOAT key field increment 给指定字段的value加上指定的increment浮点数数值

    六、Set类型

    Set类型是由字符串类型元素构成的无序集合,其元素必须是唯一的。由于Redis中的集合类型都是通过HASH表实现的,所以其添加、查找、删除的复杂度都是O(1)。

    Redis中还给集合类型提供了求交集、并集、差集等操作。

    命令

    命令 作用
    SADD key member1 [member2] 给集合添加一个或多个元素
    SCARD key 返回集合的成员数量
    SISMEMBER key member 判断元素是否是集合的成员
    SMEMBERS key 返回集合中所有的成员
    SRANDMEMBER key [count] 随机返回集合中一个或多个元素
    SREM key member1 [member2] 移除集合中的一个或多个元素
    SPOP key 随机移除并返回集合中的一个元素
    SMOVE source destination member 将一个元素member从source集合移动到destination集合
    SDIFF key1 [key2] 返回给定的所有集合的差集
    SDIFFSTORE destination key1 [key2] 返回给定的所有集合的差集,并存储到destination集合中
    SINTER key1 [key2] 返回给定的所有集合的交集
    SINTERSTORE destination key1 [key2] 返回给定的所有集合的交集,并存储到destination集合中
    SUNION key1 [key2] 返回给定的所有集合的并集
    SUNIONSTORE destination key1 [key2] 返回给定的所有集合的并集,并存储到destination集合中

    七、Sorted Set类型

    在Redis中,Sorted Set比较像是一个混合了SetHash两种类型特点的数据类型。首先,在Sorted Set中,存储的元素是唯一不可重复的字符串类型,所以说其在某种意义上是一种集合。

    但是Set中的元素是无序的,而Sorted Set中的每个元素都与一个浮点数相关联,这个浮点数被称为Score(分数),通过这个分数,Sorted Set实现了有序排列。这是其与Hash类型类似的地方,每一个元素都映射着一个Score

    Sorted Set中的顺序主要由两个规则决定:

    • 首先,一般情况下由Score决定顺序。
    • 如果出现有两个或者两个以上元素的Score相同,这个时候由元素字符串的字典顺序决定先后。

    命令

    命令 作用
    ZADD key score1 member1 [score2 member2] 添加或更新一个或多个元素及其分数
    ZCARD key 获取集合中元素的数量
    ZCOUNT key min max 获取指定分数范围内元素的数量
    ZSCORE key member 获取某个元素的分数
    ZRANK key member 获取某个元素的排名
    ZLEXCOUNT key min max 获取指定区间内元素的数量
    ZRANGE key start stop [WITHSCORES] 返回指定排名区间内的元素
    ZRANGEBYLEX key min max [LIMIT offset count] 返回指定区间内的元素
    ZRANGEBYSCORE key min max [WITHSCORES][LIMIT] 返回指定分数区间内的元素
    ZINCRBY key increment member 给指定元素的分数加上increment数值
    ZREM key member [member ...] 移除一个或多个元素
    ZREMRANGEBYRANK key start stop 移除排名区间内的元素
    ZREMRANGEBYSCORE key min max 移除分数区间内的元素

    相关文章

      网友评论

          本文标题:Redis-2.数据类型和命令

          本文链接:https://www.haomeiwen.com/subject/xkazqqtx.html