zoukankan      html  css  js  c++  java
  • Redis的数据结构、通用操作及其特性

     

    Redis的数据结构

    五种数据类型:

      字符串(String)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)、哈希(hash)

    key定义的注意点:

    • 不要过长,不要超过1024个字节
    • 不要过短,会降低可读性
    • 要有统一的命名规范

    存储String

          二进制的方式存储的,意味着该类型存入和获取的数据是相同的,value最多容纳的数据长度

    • 存储String常用命令:

      • 赋值set、
      • 取值get(getset)、
      • 删除del、
      • 扩展[incrby(将value加指定值),decrby自减]、
      • 数据增减[incr(若没有则设初始值0,再数值增1;字符串会异常),decr自减1]
      • 追加append,返回字符串长度

    存储Hash

          String key和String Value的map容器,每个Hashkey最多存储4294967295个键值对

    • 常用命令:

      • 赋值 hset myhash username cui
      • 多个赋值 hmset myhash username cui age 24
      • 取值 hget myhash username
      • 多个取值 hmget myhash username age
      • 获取全部值 hgetall myhash
      • 删除多个 hdel myhash username age
      • 删除整个集合 del myhash
      • 增加 hincrby myhash age 5
      • 判断值是否存在 hexists myhash username
      • 获取值的数量hlen myhash
      • 获取所有属性名称 hkeys myhash
      • 获取所有属性的值 hvals myhash

    存储list

         ArrayList使用数组方式,LinkedList使用双向链表方式,双向链表中增加数据、删除数据

    • 常用命令:

      • 两端添加
        • lpush mylist a b c
        • rpush mylist 1 2 3
      • 查看列表
        • lrange mylist 0 -1(查看全部)
      • 两端弹出
        • lpop mylist (弹出第一个元素,就没有此元素了)
        • rpop mylist
      • 获取列表元素个数
        • llen mylist
      • 扩展命令
        • lpushx mylist 3 (仅当mylist存在时插入)
        • rpushx mylist 3
      • lrem mylist count value
        (count>0:从头删除count个值为value的元素
        count=0: 删除所有等于value的元素
        count<0:从尾开始删除count个等于value的元素)
      • 设置下标插入 lset mylist 3 mm(在3位置插入mm)
      • 设置在某元素前后插入linsert mylist before|after b 11(在b前或后插入11)
      • 将一个list的尾弹出压入另一个list头(rpoplpush mylist1 mylist2)

    rpoplpush使用场景:

      消息队列发布系统时,对其进行备份

    存储Set

          没有排序的字符集合,不允许出现重复set可包含最大元素数量是4294967295个

    • 常用命令:
      • 添加/删除元素
        • sadd myset a b c
        • srem myset b c
      • 获取集合中的元素
        • smembers myset
      • 集合中的差集运算
        • sdiff myset1 myset2
      • 集合中的交集运算
        • sinter myset1 myset2
      • 集合中的并集运算
        • sunion myset1 myset2
      • 扩展命令
        • 判断是否有指定的值sismember myset c
        • 查看set中的元素数量 scard myset
        • 返回set中的随机一个元素 srandmember myset
        • 将两个set中相差的元素存入新的集合 sdiffstore myset3 myset1 myset2 (存入myset3)
        • 将两个set中交集的元素存入新的集合 sinterstore myset3 myset1 myset2
        • 将两个set中并集的元素存入新的集合sunionstore myset3 myset1 myset2

    set使用场景:

    • 跟踪具有唯一性的数据:访问某一博客的唯一ip地址
    • 维护数据对象之间的关联关系

    存储Sorted-Set

          Sorted-Set和Set的区别

        Sorted-Set每个成员都有一个分数(可以重复)与之关联,Redis中用来从小到大的排序。

        时间复杂度为集合中成员的个数的对数

        Sorted-Set中的成员在集合中的位置是有序的

      常用命令:

        • 添加元素
          • zadd mysort 70 cui 80 li 90 wang(先写分数再写元素,若元素已存在,则替换掉原有分数)
        • 获得元素
          • 获得分数 zscore mysort cui
          • 获得成员数量 zcard mysort
        • 删除元素
          • 删除 zrem mysort li wang
          • 按范围删除 zremrangebyrank mysort 0 4
          • 按分数范围删除 zremrangebyscore mysort 80 100
        • 范围查询
          • 查找全部 zrange mysort 0 -1
          • 查找并显示分数(由小到大) zrange mysort 0 -1 withscores
          • 查找并显示分数(由大到小) zrevrange mysort 0 -1 withscores
        • 扩展命令
          • 返回分数的某个范围的成员的前两个并按从大到小的顺序
            zrangebyscore mysort 0 100 withscores limit 0 2
          • 给li的分数加3 zincrby mysort 3 li
          • 获取分数再某个范围的成员的个数 zount mysort 80 90

      使用场景:

      • 一般用在游戏排名
      • 微博热点话题
      • 构建索引数据

    Keys的通用操作

    • keys * 查看所有key
    • del my1 my2 my3 删除指定key
    • exists my1 查看my1是否存在
    • rename my1 my2 重命名为my2
    • expire my1 1000 设置过期时间为1000s
    • ttl my1 查看剩余时间(没有设置返回-1)
    • type my1 查看key的类型
    • flushall 清空数据库

    Redis的特性

    • 多数据库
      • 一个Redis最多可提供16个数据库(0-15),也可通过 select 1选择1号数据库
      • 将0数据库的key(myset)到1号数据库 move myset 1
    • Redis事务
      • 通过multi exec discard命令实现事务
        multi 开启事务 直到 exec exec 提交 discard 回滚
  • 相关阅读:
    12.1
    11.26
    12.5Java日报
    11.25
    11.27
    12.03
    11.28
    12.04
    如何在TortoiseGit中使用sshkeygen生成的key
    leetcode 39 组合总和
  • 原文地址:https://www.cnblogs.com/shiysin/p/10688093.html
Copyright © 2011-2022 走看看