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使用场景

    • 如大型在线游戏积分排行榜
    • 构建索引数据
相关推荐
noravinsc2 小时前
django admin AttributeError: ‘UserResorce‘ object has no attribute ‘ID‘
数据库·django·sqlite
Run_Teenage3 小时前
手撕——贪吃蛇小游戏(下)
c语言·数据结构·链表
王有品4 小时前
Spring MVC 多个拦截器的执行顺序
数据库·spring·mvc
极小狐5 小时前
如何使用极狐GitLab 的外部状态检查功能?
数据库·ci/cd·gitlab·devops·mcp
Leo.yuan5 小时前
数据仓库建设全解析!
大数据·数据库·数据仓库·数据分析·spark
闪电麦坤955 小时前
SQL:子查询(subqueries)
数据库·sql
活跃的煤矿打工人5 小时前
【星海出品】分布式存储数据库etcd
数据库·分布式·etcd
文牧之5 小时前
PostgreSQL的扩展 pgcrypto
运维·数据库·postgresql
未来会更好yes6 小时前
Centos 7.6安装redis-6.2.6
linux·redis·centos
老友@7 小时前
小集合 VS 大集合:MySQL 去重计数性能优化
数据库·mysql·性能优化