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

    • 如大型在线游戏积分排行榜
    • 构建索引数据
相关推荐
执子手 吹散苍茫茫烟波15 分钟前
常见的数据库隔离级别以及企业里常用的是什么方案
数据库
Database_Cool_1 小时前
数据库慢查询优化首选方案:阿里云 RDS 性能洞察+自动诊断
数据库·人工智能·阿里云
YOU OU1 小时前
Redis初识
数据库·redis·缓存
长孙豪翔1 小时前
在.net中读写config文件的各种方法
java·数据库·.net
tachibana21 小时前
hot100 回文链表(234)
java·网络·数据结构·leetcode·链表
aaaameliaaa2 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
深盾科技_Virbox2 小时前
加密狗授权能力选型:从授权模型到全生命周期管理
java·网络·数据库
峥无2 小时前
深入理解MySQL事务与MVCC机制
数据库·mysql
行思理3 小时前
MongoDB 大数据备份,新手教程
数据库·mongodb
-To be number.wan3 小时前
数据库系统 | 规范化理论
数据库·学习