Redis数据库技术--数据结构

Redis数据结构

五种数据类型

  1. 字符串(String)
  2. 字符串列表(list)
  3. 有序字符串集合(sorted set)
  4. 哈希(hash)
  5. 字符串集合(set)

Key定义的注意点

  1. 不要过长,一般不超过1024字节
  2. 不要过短,过段会降低redis查找效率
  3. 最好有统一的命名规范

存储String

在redis中以二进制 方式存储,存入和获取的数据相同

Value最多可以容纳的数据长度为512M

  • 存储String常用命令:
    • 赋值
      set keys values
    • 取值
      get keys
    • 删除
      del keys
    • 数值增减
      incr keys(递增)
      decr keys(递减)
      如果keys存在,且可以转换为整数类型,则进行递增或递减,如果是字符串类型无法转换为整数,则会报错,如果可以说不存在,则会创建keys并为其赋值为0,在进行递增递减操作
    • 扩展命令
      incrby keys values(如果keys存在,则为keys增加指定values值 的数,如果不存在,则会创建keys并为其赋值为0,再进行增值)
      decrby keys values(如果keys存在,则为keys减少指定values值的数,如果不存在,则会创建keys并为其赋值为0,再进行减值)
      append keys values(字符串追加,再keys后面追加字符串values;如果keys不存在,则创建keys,其值就是values)

存储Hash

可以看成是String Key和String Value的map容器

每一个Hash可以存储4294967295个键值对

  • 存储Hash常用命令:
    • 赋值
      hset 键值对 keys values(单个赋值)
      hmset 键值对 keys1 values1 keys2 values2(多个赋值)
    • 取值
      hget 键值对 keys(单个取值)
      hmget 键值对 keys1 keys2(多个取值)
      hgetall 键值对(取值键值对中的所有keys和values)
    • 删除
      hdel 键值对 keys1 keys2(删除指定keys)
      del 键值对(删除整个键值对)
    • 增加数字
      hincrby 键值对 keys values(键值对中指定keys增加values值)
    • 自学命令
      hexists 键值对 keys(判断键值对中keys是否存在,如果存在返回 1,否则返回0)
      hlen 键值对(获取键值对中有几个属性)
      hkeys 键值对(获取键值对中有几个key)
      hvals 键值对(获取键值对中有几个value)

存储list

arrayList使用数组方式

LinkedList使用双向链接方式

双向链表中增加数据

双向链表中删除数据

  • 存储list常用命令:
    • 两端添加
      lpush keys value1 value2 value3(左添加)
      rpush keys value1 value2 value3(右添加)
    • 查看列表
      lrange keys start end(列出keys键值,从start开始,到end结 束,0代表第一位,-1代表最后一位,-2代表倒数第二位)
    • 两端弹出
      lpop keys(左弹出,左边弹出第一位,即删除左边第一位)
      rpop keys(右弹出,右边弹出第一位,即删除右边第一位)
    • 获取列表元素个数
      llen keys(获取keys元素个数)
    • 扩展命令
      lpushx keys values(如果keys存在,则在其左边添加字符values)
      rpushx keys values(如果keys存在,则在其右边添加字符values)
      lrem keys count values(删除keys中指定的值,count如果大于0,则从keys最左边开始删除count个数的values;如果等于0,则删除全部的values;如果小于0,则从keys最右边开始删除count个数的values)
      lset keys subscript values(更改keys的subscript角标处为values字符)
      linsert keys before value1 value2(在第一个value1的前面插入value2)
      linsert keys after value1 value2(在第一个value1的后面插入value2)
      rpoplpush keys1 keys2(将keys1的右边一位弹出,并压入keys2的左边)

存储Set

和List类型不同的是,Set集合中不允许出现重复的元素

Set可包含的最大元素数量是4294967295

  • 存储set常用命令:
    • 添加/删除元素
      sadd keys value1 value2 value3(添加元素)
      srem keys value1 value2(删除元素)
    • 获得集合中的元素
      smembers keys(查看指定keys中有哪些元素)
      sismember keys values(判断keys中是否有指定的values元素)
    • 集合中的差集运算
      sdiff key1 key2(显示key1和key2的不同部分)
    • 集合中的交集运算
      sinter key1 key2(显示key1和key2的相同部分)
    • 集合中的并集运算
      sunion key1 key2(将key1和key2合并显示)
    • 扩展命令
      scard keys(获取keys中的元素数量)
      srandmember keys(随机返回keys中的一个元素)
      sdiffstore key3 key1 key2(将key1和key2不同的部分存入key3)
      sinterstore key3 key1 key2(将key1和key2相同的部分存入key3)
      sunionstore key3 key1 key2(将key1和key2合并存入key3)
  • 存储Set使用场景
    • 跟踪一些唯一性数据
    • 用于维护数据对象之间的关联关系

存储Sorted-Set

  • Sorted-Set和Set的区别

    Sorted-Set中的每一个成员都会有一个分数与之关联,redis通过该分数对集合中的成员进行从小到大的排序

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

  • 存储Sorted-Set常用命令:

    • 添加元素
      zadd keys 分数 value1 分数 value2(添加元素,注意元素前面要加 上对应的分数,比如60、70、100等,如果添加的元素已经存在,则会更 新其分数)
    • 获得元素
      zscore keys values(获得指定元素的分数)
      zcard keys(获得keys中的元素个数)
    • 删除元素
      zrem keys value1 value2(删除指定元素)
    • 范围查询
      zrange keys start end(查询start到end范围的元素)
      zrange keys start end withscores(查询start到end范围的元素及其分数)
      zrevrange keys start end withscores(按照从大到小的顺序排序)
      zremrangebyrank keys start end(按照位置范围进行删除)
      zremrangebyscore keys start end(按照分数范围进行删除,注意start和end是分数大小)
    • 扩展命令
      zrangebyscore keys start end withscores limit start end(查 询分数范围的元素及其分数大小,并利用limit进行分页)
      zincrby keys values 元素(增加指定元素values值)
      zcount keys start end(显示start到end之间的元素个数)
  • Sorted-Set使用场景

    • 如大型在线游戏积分排行榜
    • 构建索引数据
相关推荐
不见长安在13 分钟前
mysql线上主从集群设置
数据库·mysql
tiging14 分钟前
mysql 如何让事件执行
数据库·mysql
siriuuus23 分钟前
MySQL 数据备份
数据库·mysql·备份
姚远Oracle ACE23 分钟前
Oracle AWR 报告中的SQL来自哪儿?
数据库·sql·oracle
熊文豪27 分钟前
KingbaseES数据库性能调优工具全面解析
数据库·kingbasees·金仓数据库·电科金仓
冠希陈、41 分钟前
PHP7.4.33 安装sqlsrv扩展
数据库
光影34151 小时前
专利撰写与申请核心要点简报
前端·数据库·php
水蓝烟雨1 小时前
0430. 扁平化多级双向链表
数据结构·链表
心灵宝贝1 小时前
申威ky10架构安装MongoDB 4.0.1(rpm包:mongodb-4.0.1-8.ky10.sw_64.rpm)详细步骤
数据库·mongodb·架构
阿巴~阿巴~1 小时前
Linux线程与进程的栈管理、页表机制及线程封装
数据结构·线程·进程·线程封装·页表机制·栈管理