zoukankan      html  css  js  c++  java
  • redis初识

    1、前置知识

    磁盘知识:寻址:ms

         宽带:G/M

    内存:寻址:ns

              带宽:很大

    秒 > 毫秒 > 微秒 > 纳秒

    内存寻址比硬盘寻址快10w倍

    折中做法:

      将内存种的一部分数据做缓存

      memcached

      key value结构,value没有类型的概念

      redis(秒级十万操作)

      同为key value结构,value有类型,string(字符,数值,bitmaps),hashes,lists,sets,sorted sets

    2、安装

    //下载
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    //解压
    tar -xf redis-5.0.5.tar.gz
    //安装
    make
    make install PREDIX=/opt/redis
    //修改环境变量
    vim /etc/profile
    export REDIS_HOME:/opt/redis
    export PATH:.$PATH:REDIS_HOME/bin
    //安装服务,按脚本填写配置,自动生成脚本文件在/etc/redis/6379
    cd utils
    ./install_server.sh 

    3、处理流程

    linux系统种存在kernel(内核),epoll是一种系统调用,redis是单进程单线程单实例并发很多的请求,为什么并发那么多。调用了系统内核的epoll

    epoll概念

    文件描述符从block(阻塞)发展到noblock(非阻塞的),这时为同步非阻塞时期

    此时发展出一个问题,用户进程轮询调用1000次kernel,成本问题

    这时发展出了select概念

    统一把这一千个文件描述符传给select,多路复用nio,减少了内核态和用户态的切换

    这些所有的功能都是由jvm实现的,jvm由c编写

    4、关于linux用户态和内核态(待完善)

    问题:文件描述符相关数据拷来拷去成为累赘

    内核有内核的空间,用户有用户的空间,所以伸展出一个内核和用户的共享空间

    共享空间由红黑树+链表+mmap实现

    5、实际操作

     Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

     它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 
     Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

    String:

    select db //选择数据库(0-20)
    
    set k v //设置一个数据
    
    set k1 v nx //nx仅仅可以新建的时候进行插入数据
    
    set k2 v xx //xx仅仅可以更新的时候进行更新数据
    
    mset k1 v1 k2 v2 //可以进行设置多个值
    
    get k //返回一个v,没有返回nil
    
    mget k1 k2 k3 // 获取多个v
    
    getrange k start end  //获取一个索引从start到end,双闭合的区间
    
    setrange k start value //更新区间范围,我们可以从start的索引开始,更新value数据
    
    del key //删除一条kv数据
    
    keys pattern //用正则查询key
    
    flushdb //清空db
    
    help @string //查询string相关帮助信息
    
    append k v //给k的数据进行追加v这个数据
    
    type k //查看value是什么类型
    
    object encoding k //查看v的数据类型
    
    incr k1 //将integer的数据类型加一
    
    incrby k1 v //将integer数据类型加v
    
    decr k1 //将integer的数据类型减一
    
    decrby k1 v //将integer数据类型减v
    
    incrbyfloat k1 v //将integer数据类型加一个浮点型
    
    //数据不够长的时候编码是embstr,之后会变为raw格式
    
    strlen k1 //查看v的长度
    
    redis-cli --raw //进行进入,会识别编码(比如自动识别GBK)
    
    getset k1 v //更新新值,返回旧值
    
    bitpos key bit start //查看从start到end的字节,第一次bit出现的位置
    
    bitcount key start //查看start到end的时候,1出现的次数
    
    bitop and andkey k1 k2 //执行k1 k2 按位与操作
    
    bitop or orkey k1 k2 //按位或操作

    list:

    //lpush、lpop、rpush、rpop 和栈一样
    
    lrange 0 -1 //所有元素查看
    
    lindex key index //查看索引位置的值
    
    lrem key count value //移除count数量的value
    
    linsert key after afval value //在键后面插入值
    
    linsert key before befval value //在key前面插入值
    
    blpop //阻塞式取值(等待有值再取出)
    
    ltrim key start //修剪,进行修剪队列
    

      

    hash:

    hset key filed value //设置一个key field的值
    
    hget key field //获得一个key field的值
    
    hmset key field value field value //设置多个field的值
    
    hmget key field fied //获取多个field的值
    
    hkeys key //查看所有的key
    
    hvals key //查看所有的field
    
    hincrby key field num //增加num值
    

      

    set:

    sadd key v1 v2 v3... //插入v1,v2,v3...
    
    smember key// 列出所有的value
    
    srem v1 v2 //删除v1,v2...
    
    sinter k1 k2 //求交集并返回
    
    sinterstore dest k1 k2 //交集结果存储dest
    
    sunion k1 k2 //求并集返回
    
    sunionstore dest k1 k2 //并集存储dest
    
    sdiff k1 k2 //求差集并返回
    
    sdiffstore dest k1 k2 //求差集存储dest
    
    srandmember k1 //随机返回一个成员
    
    srandmember k1 num //随机返回num个元素,num为正数,取出一个去重结果集,如果为负数,那么取出不去重结果集
    

      

    zset:

    - zadd k score mem score mem //插入数据后增加权重
    - zrange k 0 -1 //取出所有的值
    - zrangebyscore k low high //取出从low到high区间的数据
    - zrange k start end //从start到end之间的数据取出
    - zscore k v //返回一个数据的分值
    - zscore k  v //返回一个数据的排行
    - zrange k 0 -1 withscores //携带分数取出
    - zincrby k incrscore v //增加一个值的分值
    - zunionstore k keynum k1 k2..[aggregate max] //多个key的并集[最大值]
    

      

  • 相关阅读:
    jstl标签
    get和post
    try中的局部变量在finally中是找不到的。
    bzoj 4408: [Fjoi 2016]神秘数 数学 可持久化线段树 主席树
    ZOJ2112 BZOJ1901 Dynamic Rankings 树套树 带修改的区间第k小
    BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
    POJ2104 K-th Number 不带修改的主席树 线段树
    POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd
    POJ1151 Atlantis 水题 计算几何
    BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set
  • 原文地址:https://www.cnblogs.com/dagreentree/p/13371084.html
Copyright © 2011-2022 走看看