Redis~五大基础数据类型(字符串, 字典, 列表, 集合, 有序集合)的使用

字符串

  • 字符串是Redis最基本的数据结构, 它犹如java中的Map结构, 以一个键和一个值得形式存储于Redis内部
    在这里插入图片描述

常用基本命令

  1. set [key] [value] 设置键对值
  2. get [key] 通过key获得value
  3. del [key] 通过key 删除value
  4. strlen [key] 求key对应value字符串的长度
  5. getset [key] [value] 修改原来key对应的value 并将旧的value返回
  6. append [key] [value] 将新的value加入到key指定的字符串的后面
  7. getstrange [key] [start] [end] 获取字符串, 这个字符串从0开始计数, 范围是左闭右开
    在这里插入图片描述

字典

  • 字典用称为散列类型或者哈希表类型, 他是将一个键值key和一个特殊的哈希表关联起来, 相当于java中的Map<String, Map<String, String>>结构
  • 使用字典可以很方便的存储java中的对象, 类似序列化操作 , 比如:
    key = person, value = {<name, listen>, <age, 22>}
  • 通常气矿下字典类型会使用数据的方式存储相关数据, 但发生哈希冲突的时候才会使用链表的结构存储数据
    在这里插入图片描述

常用基本命令

  1. hset [key] [[field] [value], [field] [value]…] 在hash结构中设置多个键对值
  2. hget [key] [field] 返回hash结构中field对应的value
  3. hgetall [key] 获取hash结构中所有键对值
  4. hvals [key] 获取hash结构中所有的值
  5. hdel [key] [field…] 删除hash结构中某些字段
  6. hexists [key] [field] 判断hash结构是否存在field字段
    在这里插入图片描述

注意问题

  • 如果key对应的hash结构很大, 那么在使用hkeys 、hgetall 、 hvals 但会的所有数据会对性能造成很大问题, 从而对jvm造成影响

列表

  • 链表List是一个使用链表数据结构存储的有序结构, 他的元素插入会按照先后顺序存储到链表结构中, 因此他的插入和删除操作的时间复杂度都是O(1) 但是从查询时间复杂度是O(n)

  • Redis的链表是双向的, 因此既可以从左到右, 也可以冲右到左遍历节点
    在这里插入图片描述

  • 列表主要使用在消息队列和文章列表中

常用命令

  1. lpush [name] [v1,v2, v3] 添加数据到链表最左边
  2. rpush [name] [v1,v2] 添加元素搭配链表最右边
  3. lpop [name] 获取并删除左边第一个元素
  4. rpop [name] 获取并删除右边第一个元素
  5. lset [name] [index] [v1] 设置下标为index节点的value为v1
    在这里插入图片描述

注意事项

  1. 对于大量数据操作的时候, 我们需要考虑插入和删除内容的大小, 不然会导致redis服务器卡顿, 应该分批次操作
  2. 操作链表的命令是多线程不安全的, 因为当我们操作这些命令的时候, 因为现在Redis服务器都是使用集群来提供稳定性, 那么就有可能其他Redis服务器也在操作同一个链表, 尤其操作很大的链表的时候, 常常会有这些问题
  3. 为了解决上诉问题,从Redis提供了脸部奥阻塞的命令, 他们在运行的时候, 会给链表加锁, 保证命令的安全性

集合

  • 集合Set 和java中的set类似是一个无序的唯一的键值集合 其插入和删除和查询的时间复杂度都是O(1)
  • 常使用在比如微博关注和粉丝, 保证人员的不重复, 还有在一些抽奖活动中

常用基本命令

  1. sadd [key] [v1, v2, v3] 为键为key的集合添加成员
  2. scard [key] 统计key中集合的成员数目
  3. smembers [key] 返回集合所有成员
  4. spop [key] 随机弹出集合的一个元素
    在这里插入图片描述

有序集合

  • 有序集合相对于上面说到的集合类型多了一个排序属性, 其主要区别在于每一个元素除了值之外, 他还会多一个分数, 这个分数是一个浮点数, 在java中是双精度表示, 根据分数, redis就可以支持对分数从小到大或者从大到小排序
  • 其他特性如和集合类似, 每一个元素都是唯一的, 但是对于不同元素而言, 他的分数可以一样, 当然元素是string类型 和其对于的分数也是基于hash结构存储
  • 其插入删除查询的时间复杂度也是O(1)
  • 常使用在学生成绩排名和有时间先后顺序一堆数据
    在这里插入图片描述

常用命令

  1. zadd [name] [v1, score] [v2, socre] … 向有序集合添加一个或者多个成员
  2. zcard [name] 获取有序集合的成员数
  3. zrank [name] member 按从小到大有序集合的排行
  4. zrevrank [name] member 按从大到小的排序, 求元素的排行
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/108476513