zoukankan      html  css  js  c++  java
  • redis的数据类型和基本操作

    Redis 的Key

    Redis 的 key 是字符串类型,但是 key 中不能包括边界字符,由于 key 不是 binary safe的字符串,所以像"my key"和"mykey "这样包含空格和换行的 key 是不允许的。

    • exits key 检测指定 key 是否存在,返回 1 表示存在,0 不存在
    • del key1 key2 ...... keyN 删除给定 key,返回删除 key 的数目,0 表示给定 key 都不存在
    • rename oldkey newkey 重命名一个 key,如果 newkey 存在,将会被覆盖,返回 1 表示成功,0 失败。可能是 oldkey 不存在或者和 newkey 相同。
    • expire key seconds 为 key 指定过期时间,单位是秒。返回 1 成功,0 表示 key 已经设置过过期时间或者不存在。

    Redis 的vaule

    redis 提供五种数据类型: string,hash, list,set 及zset。

    string 类型

    string 是最基本的类型。可以作为以下类型使用:

    • 字符串
    • byte数组:string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。从内部实现来看其实 string 可以看作 byte数组,最大上限是 1G 字节。
    • 长整数:类似于Long或者Int,但是由于redis是C语言编写的,所以在32位的机器上是32位,64位机器上是64位。
    • 浮点型:双精度浮点数。类似于Double。

    string 类型数据操作指令简介:

    • set key value 设置 key 对应 string 类型的值,返回 1 表示成功,0 失败。
    • setnx key value 如果 key 不存在,设置 key 对应 string 类型的值。如果 key 已经存在,返回 0。
    • get key 获取 key 对应的 string 值,如果 key 不存在返回 nil
    • mget key1 key2 ...... keyN 一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。
    • mset key1 value1 ...... keyN valueN 一次设置多个 key 的值,成功返回 1 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。
    • msetnx key1 value1 ...... keyN valueN 一次设置多个 key 的值,但是不会覆盖已经存在的 key
    • incrby key integer 对 key 加上指定值 ,key 不存在时候会设置 key,并认为原来的 value是 0。
    • GETRANGE
    • SETRANGE
    • APPEND
    • SETEX key seconds valu:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。 
    • GETBIT key offset字符串值指定偏移量上的位(bit)。
    • SETBIT key offset字符串值指定偏移量上的位(bit)。

    List(列表)

    Redis列表是简单的字符串列表,实现是双向链表。

    可以作为:双向链表,双端队列,栈,BlockingQueue等。

    命令:

    • BLPOP
      BLPOP key1 [key2 ] timeout 取出并获取列表中的第一个元素,或阻塞,直到有可用
    • BRPOP
      BRPOP key1 [key2 ] timeout 取出并获取列表中的最后一个元素,或阻塞,直到有可用
    • BRPOPLPUSH
      BRPOPLPUSH source destination timeout 从列表中弹出一个值,它推到另一个列表并返回它;或阻塞,直到有可用
    • LINDEX
      LINDEX key index 从一个列表其索引获取对应的元素
    • LINSERT
      LINSERT key BEFORE|AFTER pivot value 在列表中的其他元素之后或之前插入一个元素
    • LLEN
      LLEN key 获取列表的长度
    • LPOP
      LPOP key 获取并取出列表中的第一个元素
    • LPUSH
      LPUSH key value1 [value2] 在前面加上一个或多个值的列表
    • LPUSHX
      LPUSHX key value 在前面加上一个值列表,仅当列表中存在
    • LRANGE
      LRANGE key start stop 从一个列表获取各种元素
    • LREM
      LREM key count value 从列表中删除元素
    • LSET
      LSET key index value 在列表中的索引设置一个元素的值
    • LTRIM
      LTRIM key start stop 修剪列表到指定的范围内
    • RPOP
      RPOP key 取出并获取列表中的最后一个元素
    • RPOPLPUSH
      RPOPLPUSH source destination 删除最后一个元素的列表,将其附加到另一个列表并返回它
    • RPUSH
      RPUSH key value1 [value2] 添加一个或多个值到列表
    • RPUSHX
      RPUSHX key value 添加一个值列表,仅当列表中存在

    Set(集合)

    可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。

    set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

    相关命令

    • SADD
      SADD key member [member ...] 添加一个或者多个元素到集合(set)里
    • SACRD
      SCARD key 获取集合里面的元素数量
    • SDIFF
      SDIFF key [key ...] 获得队列不存在的元素
    • SDIFFSTORE
      SDIFFSTORE destination key [key ...] 获得队列不存在的元素,并存储在一个关键的结果集
    • SINTER
      SINTER key [key ...] 获得两个集合的交集
    • SINTERSTORE
      SINTERSTORE destination key [key ...] 获得两个集合的交集,并存储在一个集合中
    • SISMEMBER
      SISMEMBER key member 确定一个给定的值是一个集合的成员
    • SMEMBERS
      SMEMBERS key 获取集合里面的所有key
    • SMOVE
      SMOVE source destination member 移动集合里面的一个key到另一个集合
    • SPOP
      SPOP key [count] 获取并删除一个集合里面的元素
    • SRANDMEMBER
      SRANDMEMBER key [count] 从集合里面随机获取一个元素
    • SREM
      SREM key member [member ...] 从集合里删除一个或多个元素,不存在的元素会被忽略
    • SUNION
      SUNION key [key ...] 添加多个set元素
    • SUNIONSTORE
      SUNIONSTORE destination key [key ...] 合并set元素,并将结果存入新的set里面
    • SSCAN
      SSCAN key cursor [MATCH pattern] [COUNT count] 迭代set里面的元素

     

    Hash(字典,哈希表)

    就是HashMap。

    相关命令

    • HDEL
      HDEL key field[field...] 删除对象的一个或几个属性域,不存在的属性将被忽略
    • HEXISTS
      HEXISTS key field 查看对象是否存在该属性域
    • HGET
      HGET key field 获取对象中该field属性域的值
    • HGETALL
      HGETALL key 获取对象的所有属性域和值
    • HINCRBY
      HINCRBY key field value 将该对象中指定域的值增加给定的value,原子自增操作,只能是integer的属性值可以使用
    • HINCRBYFLOAT
      HINCRBYFLOAT key field increment 将该对象中指定域的值增加给定的浮点数
    • HKEYS
      HKEYS key 获取对象的所有属性字段
    • HVALS
      HVALS key 获取对象的所有属性值
    • HLEN
      HLEN key 获取对象的所有属性字段的总数
    • HMGET
      HMGET key field[field...] 获取对象的一个或多个指定字段的值
    • HSET
      HSET key field value 设置对象指定字段的值
    • HMSET
      HMSET key field value [field value ...] 同时设置对象中一个或多个字段的值
    • HSETNX
      HSETNX key field value 只在对象不存在指定的字段时才设置字段的值
    • HSTRLEN
      HSTRLEN key field 返回对象指定field的value的字符串长度,如果该对象或者field不存在,返回0.
    • HSCAN
      HSCAN key cursor [MATCH pattern] [COUNT count] 类似SCAN命令

    ZSet(有序集合)

    注意:ZSet内部是一个Set和跳跃链表。Set内部是一个Hash。

    Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。

    Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员(这一段有问题,应该是hashmap中存储所有的成员来保证唯一性,skitlist用来保证顺序,里面存储的应该是core和指向成员的指针),排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

    关于跳跃链表:

    跳跃链表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。

    基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。

    跳跃列表是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的"快速跑道",这里在层 i 中的元素按某个固定的概率 p 出现在层 i+1 中。平均起来,每个元素都在 1/(1-p) 个列表中出现,而最高层的元素(通常是在跳跃列表前端的一个特殊的头元素)在 O(log1/pn) 个列表中出现。

    跳跃表参考:http://www.cnblogs.com/acfox/p/3688607.html

    总之,跳跃表是有序的。作为索引的作用来实现ZSet。

    使用场景

    Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。
    可以作为PriorityQueue。不过元素不能重复。

    相关命令

    • ZADD
      ZADD key score1 member1 [score2 member2] 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数
    • ZCARD
      ZCARD key 得到的有序集合成员的数量
    • ZCOUNT
      ZCOUNT key min max 计算一个有序集合成员与给定值范围内的分数
    • ZINCRBY
      ZINCRBY key increment member 在有序集合增加成员的分数
    • ZINTERSTORE
      ZINTERSTORE destination numkeys key [key ...] 多重交叉排序集合,并存储生成一个新的键有序集合。
    • ZLEXCOUNT
      ZLEXCOUNT key min max 计算一个给定的字典范围之间的有序集合成员的数量
    • ZRANGE
      ZRANGE key start stop [WITHSCORES] 由索引返回一个成员范围的有序集合(从低到高)
    • ZRANGEBYLEX
      ZRANGEBYLEX key min max [LIMIT offset count]返回一个成员范围的有序集合(由字典范围)
    • ZRANGEBYSCORE
      ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 返回有序集key中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员,有序集成员按 score 值递增(从小到大)次序排列
    • ZRANK
      ZRANK key member 确定成员的索引中有序集合
    • ZREM
      ZREM key member [member ...] 从有序集合中删除一个或多个成员,不存在的成员将被忽略
    • ZREMRANGEBYLEX
      ZREMRANGEBYLEX key min max 删除所有成员在给定的字典范围之间的有序集合
    • ZREMRANGEBYRANK
      ZREMRANGEBYRANK key start stop 在给定的索引之内删除所有成员的有序集合
    • ZREMRANGEBYSCORE
      ZREMRANGEBYSCORE key min max 在给定的分数之内删除所有成员的有序集合
    • ZREVRANGE
      ZREVRANGE key start stop [WITHSCORES] 返回一个成员范围的有序集合,通过索引,以分数排序,从高分到低分
    • ZREVRANGEBYSCORE
      ZREVRANGEBYSCORE key max min [WITHSCORES] 返回一个成员范围的有序集合,以socre排序从高到低
    • ZREVRANK
      ZREVRANK key member 确定一个有序集合成员的索引,以分数排序,从高分到低分
    • ZSCORE
      ZSCORE key member 获取给定成员相关联的分数在一个有序集合
    • ZUNIONSTORE
      ZUNIONSTORE destination numkeys key [key ...] 添加多个集排序,所得排序集合存储在一个新的键
    • ZSCAN
      ZSCAN key cursor [MATCH pattern] [COUNT count] 增量迭代排序元素集和相关的分数
  • 相关阅读:
    为结构体中函数指针赋值的两种方法(转)
    (obj) error: LNK2019: 无法解析的外部符号解决方法
    js cookie存储方法
    js关于对象键值为数字型时输出的对象自动排序问题的解决方法
    HTML5 LocalStorage 本地存储的用法
    onhashchange事件,只需要修改hash值即可响应onhashchange事件中的函数(适用于上一题下一题和跳转页面等功能)
    js实现页面a向页面b传参的方法
    前端比较好的学习资料(包括js和css)以及 最全前端资源汇集
    字符串js编码转换成实体html编码的方法(防范XSS攻击)
    fis3使用环境
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7225801.html
Copyright © 2011-2022 走看看