• redis五种数据结构详解


    5.相关介绍和命令

    5. redis是单线程+多路io复用技术

    	多路复用是指使用一个线程来检查多个文件描述符的就绪状态,比如调用select和poll函数,传入多个文件毛舒服,如果有一个文件描述符就绪,则返回,否则阻塞到超时。得到就绪状态后进行真正的操作可以在用一个线程里执行,也可以启动线程执行(比如使用线程池)
    	串行 vs 多线程+锁 vs 单线程+多路io复用(redis)
    

    redis底层实现

    5.2 redis 健(key)

    keys * 才看看当前库所有的key
    0

    exists key的名称 1表示在 0表示不存在

    type key key的类型
    del key 删除 key
    expeire key 设置过期时间

    ttl key 查看还有多久过期 -1 永不过期 -2过期

    select 数字 表示切换库 select 1 切换到1号库
    dbsize 查看当前数据库的key的数量

    flushdb 清空当前库

    flushall 清空所有库

    5.2常用数据类型操作 string

    string字符串是redis的最基本的啥类型,一个key对应一个value ,string类型是二进制安全的,意味着redis的string可以包含任何数据,比如jpg 图片或者序列化对象

    基本命令:
    set命令:
    set k1 v100 为k1设置值为v100
    get k1 查询k1的值
    append k1 abc k1的值为v100abc
    strlen 获取值的长途
    setnx 只有在key不存在的时候,才能成功 setnx k1 v1 返回 0 为不成功 为1 表示成功
    incr 将key中存储的数字值增1
    decr 将key中存储的数字值减1
    ** 注意redis中是原子操作:因为redis是单线程+多路io复用**

    5.3思考 java中的 i++是否为原子操作

    下一波命令:
    mset:设置多个key value
    mget:设置多个value
    msetnx: 任何一个存在,则所有都失败
    getrange:获取指定大小的范围的值
    setrange 在指定的范围设置值

    5.3redis列表

    单键多值
    redis列表是简单的字符串列表,按照插入顺序飘絮。你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层为一个双向列表,
    常用命令:
    lpush:左边添加value值
    rpush: 右边添加value值
    lrange: 从左边开始取(到范围为止)
    lpop/rpop 从左/右吐出一个值。值在健在,值光健亡
    lrange 获取指定范围的值
    lindex 按照索引下表获取元素
    llen 获取列表长度
    linsert before 的后面插入插入值
    lset 将列表key下表为index的值替换为value

    5.4 集合 set

    set和list差不多,主要是会自动排重,而且数无序的。redis的set是string类型的无序集合,他底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是0(1)。
    常用命令:
    sadd:将一个或多个元素加入到集合可以在指那个,已经存在的member元素将被忽略
    smembers:取出所以集合的值
    sismember:是否含有该值
    scard:返回该集合的元素个数
    srem 删除集合中的某个元素
    spop:随机从该集合吐出一个值
    srandmember:随机从该集合中取出n个值,不会从改集合中删除。
    smove:把集合中的某一个值从一个集合移动到另一个集合
    **sinter 返回两个集合的交集元素
    **sunion;返回两个集合的并集元素 共同好友功能
    **sdiff:返回两个集合的差集元素

    5.4redis-hash类型

    redis hash 是一种键值对的类型
    redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。,类似于java中的Map

    命令:
    hset 给集合中的键赋值
    hget 获取某个filed的值
    hmset 批量设置多个filed值
    hexists:判断是否存在这个字
    hkeys:查询所有的filed值
    hvals:查询所有的value
    hincrby:加一
    hsexnx 加数据的

    5.5 zset数据结构

    redis 有序集合zset与普通的集合set非相似,是一个没有重复的有序集合
    底层结构:
    命令:
    zset的两种实现方式
    ziplist(压缩链表):满足以下两个条件的时候
    元素数量少于128的时候
    每个元素的长度小于64字节
    skiplist(跳跃链表):不满足上述两个条件就会使用跳表,具体来说是组合了map和skiplist
    map用来存储member到score的映射,这样就可以在O(1)时间内找到member对应的分数
    skiplist按从小到大的顺序存储分数
    skiplist每个元素的值都是[score,value]对

    zdd:添加内容(一个或者多个)
    zrange:返回有序集key中,下标在之间的元素
    zrangbyscore :取指定区域的方法
    zrevrangbyscore:与上述的排序方式相反
    zincrby: 为score值进行增加操作
    zrem:删除某个 指定的元素
    zcount:统计功能


    __EOF__

  • 本文作者: wiselee
  • 本文链接: https://www.cnblogs.com/wiseleer/p/16903666.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Hive执行计划之只有map阶段SQL性能分析和解读
    【scikit-learn基础】--『预处理』之 缺失值处理
    从IoTDB的发展回顾时序数据库演进史
    30岁年薪28W,我还是没顶住压力跳槽了····
    7139 Dragon slayer
    协方差矩阵
    蒙提霍尔问题(The Monty Hall Problem)解析(含python仿真)
    NFS网络文件系统
    【学习笔记】Understanding LSTM Networks
    java街边熟食店卤菜网上商城系统springboot+vue
  • 原文地址:https://www.cnblogs.com/wiseleer/p/16903666.html