zoukankan      html  css  js  c++  java
  • Redis--基础总结

    Redis
    一:初识Redis

    1、Redis 是什么?

    一款开源的基于C语言的内存的键值对存储数据库,支持多种数据结构如:Set、hash、List、Zset、等,高性能的内存数据库。

    2、Redis 特性 速度快 (10W Ops、单线程)
      持久化 (可异步保存到磁盘,断电后不丢失数据)
      多种数据结构
      支持多种编程语言
      功能丰富
      简单
      主从复制
      高可用、分布式

    3、应用场景

      缓存、计数器、消息队列、排行榜、社交网络、实时系统、会话存储、

    4、安装 官方地址:https://redis.io/download
      $ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
      $ tar xzf redis-5.0.4.tar.gz
      $ cd redis-5.0.4
      $ make
      运行服务端
      $ src/redis-server
      客户端访问
      $ src/redis-cli
        备注: 可以建立一个软连接以备后续升级: ln -s redis-5.0.4 redis

    5、启动方式 简单启动 sh 、动态参数启动、配置文件启动
      默认端口:6379
      停止方式为:shoutdown 这样Redis可以保存相关操作后再进行关闭。
      指定修改后的conf启动:/opt/software/redis-5.0.4/src/redis-server /opt/software/redis-5.0.4/redis.conf
      配置文件修改:
      关闭默认本地访问:#bind 127.0.0.1
      关闭守护进程:protected-mode no
      设置访问密码:requirepass password
      本机访问 src/redis-cli 连接后输入验证:auth root

    6、Redis常用配置

      daemonize 是否守护进程(no/yes)修改成yes 可以进行日志记录
      port 设置对外访问端口默认:6379
      logfile: 日志名称,记录日志
      dir:Redis工作目录

    7、通用命令

       keys * (获取所有key)、
      dbsize(获取数据库大小)、
      exists key(判断当前key是否存在)
      del key[key] (删除key)
      expire key seconds(设置过期时间)
      type key (判断类型)
      ttl key(查询剩余过期时间)
      persist key (去除过期时间)
      scan循环遍历
      flushall 清除所有key value

    8、名词:   

      往返延迟:①客户端向服务器发送指令;②服务端接收指令,存储到执行队列;③服务器开始执行指令;④服务器返回执行结果;整个系列中的总耗时称之为往返延迟。



    二、数据类型

    1、String

       key key1 value val{类型可以是:字符、数字(整数、浮点数)、bits、json、xml}
      单个最大512MB。尽量控制在100kb

    1、1:常用操作   i

      ncr key :自增1; 如果key不存在增加后值为 1;
      decr key :自减1: 如果key 不存在自减后为 -1;
      incrby key k:key增加k;如果不存在增加后为k;
      decrby key k:key减去k:如果不存在自减后为-k;

      setnx key value :当key不存在时进行新增;成功返回1,失败返回0
      set key value xx :当key存在时进行重新赋值,类似更新操作
      mset key1 value1 key2 value2 key3 value3 : 批量设置值
      mget key1 key2 key3 : 批量取值

      getset key:先返回原有值;在进行更新值
      append :追加操作,如果键不存在会先增加后返回
      strlen :获取字符串长度(注意中文两个字节)
      incrbyfloat:增加对应key浮点数
      getrange:获取指定字符串下标的值
      setrange:设置指定字符串下标的值,类似替换操作

    [总结]
    ①:Redis内部编码
    int:用于长度小于64位有符号整数表示的字符串<数字类型的字符串>
    embstr: 用于长度小于等于44字节的字符串;这种类型的编码在内存使用和性能方面更有效率
    raw:用于长度大于44字节的字符
    ②:字符串可以存储普通的字符、整数、浮点数;如果存入的value 可以被转换为整数或浮点数,则可以使用incr、decr、incrby、decrby;如果对字符进行增减,则会返回错误异常,如果值为空则当做0处理。
    ③:getrange key start end 当范围值strlen key超出当前长度,则直接返回字符末端。
    ④:setrange key index value 当在指定index上对应一个长度value则只修改指定index,如果value长度不为1则覆盖其指定位置后其它value,超出部分会直接替换进去。


    2、hash 哈希

    2.1、常用操作

       hget key field : 获取 键map中指定字段的属性值
      hset key field value: 设置 键map中指定字段的属性值;当map中的field已存在时使用重复field可覆盖value
      hdel key field : 删除 键map中指定字段的属性值
      hgetall key : 获取key哈希表所有属性包含:字段名、字段属性值<注意不要滥用:redis是单线程>
      hkeys key : 获取key中所有字段名称
      hvals key : 获取key中所有值
      hexists key field : 判断指定列表中某个字段是否存在
      hlen:计算指定key哈希的长度;注意返回字段属性长度
      hmset key1 field1 value1 field2 value2 field3 value3:批量设置值
      hmget key1 field1 field2 :批量取值

      hsetnx key value :当key不存在时进行新增;成功返回1,失败返回0
      hset key value xx :当key存在时进行重新赋值,类似更新操作
      hincrby 自增
      hincrbyfloat 浮点数增加


    3、list列表

    3、1:常用操作   

      ’rpush keylist value1 value2 value3 : 从当前列表的value右侧开始插入数据 ===>>>value1、value2、value3
      lpush keylist value1 value2 vlaue3 : 从当前列表的value左侧开始插入数据 ===>>>value3、value2、value1
      linsert keylist befor|after value newValue :在当前列表value值之前插入还是之后插入数据
      lpop keylist : 从左边删除一个元素
      rpop keylist : 从右边删除一个元素
      lrem keylist 0|1|-1 value: 删除列表中值等与value的相同元素;0 所有;1从左到右;-1从右到左
      ltrim keylist start end : 列表修剪,只保留当前keylist中start到end之间的元素,其中start与end会被保留
      lrande keylist start end : 获取列表从右到左指定范围内的值,包含start与end对应坐标值会返回
      lindex keylist index : 获取指定下标的值
      llen keylist : 获取列表长度
      lset keylist index newValue: 更新指定下标值
        备注:0~ -1 范围内返回的是整个列表。


    4、set无序集合

    特点:集合不允许重复,集合内元素无序,支持集合间操作(交集、并集、差集)
      集合排序分值相等会按照名称进行排序;key不可以重复,value 可以重复(重复后会替换原有值)

    4、1:常用操作 sadd key element(多个元素):增加元素
      srem key element :删除元素
      scard key: 计算集合元素个数
      sismember key: 判断值是否存在
      srandmember key: 从集合中随机取出一个或多个元素;参数:[count] 当count为正数随机返回元素不会重复;当count为负数时随机返回元素可能会出现重复值
      smembers key: 取出集合所有元素
      spop key:从集合中随机移除一个元素,并返回被移除的元素
      smove key1 key2: 如果key1中存在element那么从key1中移除element,并将element添加至key2中成功返回1;失败返回0

    4、2:集合间操作 sinter key1 [key2,key3...]: 求交集;返回同时存在第一个集合,而又存在于其它集合中的元素。
      sinterstore desc_key1 key1[key2,key3...]: 求交集;将同时存在所有集合中的元素,存储到desc_key1集合中。
      sdiff :求差集
      sdiffstore desc_key1 key1[key2,key3...]: 求差集;将只存key而不存在其它集合中的元素,存储到desc_key1集合中。
      sunion :求并集
      sunionstore desc_key1 key1[key2,key3...]: 求并集;将至少存在一个元素中的值,存储到desc_key1集合中。(不含重复值)


    5、sorted set有序集合

    特点:不允许重复,集合内元素有序。存在分值排序。形式 key score element;集合排序分值相等会按照名称进行排序;
      key不可以重复,value 可以重复(重复后会替换原有值)

    5、1:常用操作

      zadd key score element: 增加元素score 可以重复
      zrem key element :从指定集合中移除指定元素,并返回移除个数。
      zscore key element:获取指定集合中元素的分数
      zincerby key increscore element:自增,自减分值
      zcard key :返回集合元素个数
      zrank key element: 获取元素排名;排名规则是根据分支score 从小到大--->>>0-100排序规则。
      zrange key start end :获取指定范围内排名的值:指定范围内排序规则是升序。从低到高
      zrangebyscore key minScore maxScore 获取指定分数内的元素值,从低到高
      zcount key minScore MAxScore 获取指定分数内的元素个数
      zremrangebyrank key start end :移除指定集合中排名介于start至end之间的所有成员 zremrangebyrankkey 0 -4<减去第四个>
      zremrangebyscore key minScore maxScore : 移除指定集合中分数介于minScore至maxScore之间的所有成员

    5、2:其它操作

       zrevrank key element: 获取指定集合key中指定元素element的排名;排名从高到低
      zrevrange key start end :获取指定范围内排名的值:指定范围内排序规则是升序。从高到低
      zrevrangebyscore key minScore maxScore 获取指定分数内的元素值,从高到低
      zinsterstore desc_key1 key1[key2,key3] :对指定集合进行交集运算,key返回一个新的集合
      zunionstore desc_key1 key1[key2,key3] :对指定集合进行并集运算,key返回一个新的集合


    6、HyperLogLog 唯一计数

    特点:当数据量达到千万等级别的时使用HyoerLogLog所消耗的内存较小

    6、1:常用操作 pfadd key value: 增加元素
      pfcount key : 获取key 去重复值统计
      pfmerge newKey key1 key2 :合并两个key 产生汇总集合。

    6、2:其它操作


    7、geo 地理位置   

    特点:存储基于地理信息坐标的集合

    7、1:常用操作

       e maxScore 获取指定分数内的元素值,从高到低
      zunionstore 有序集合合并



    8、pipeline : 批量执行,可以一次性执行一批get/set 命令;pipeline只适用于单节点
      conn.pipelined(true|false); true 使用事务执行;false不开启事务执行

    示例:
    public void updateTokenPipeline(Jedis conn, String token, String user, String item) {
    long timestamp = System.currentTimeMillis() / 1000;
    Pipeline pipe = conn.pipelined(false);
    pipe.multi();
    pipe.hset("login:", token, user);
    pipe.zadd("recent:", timestamp, token);
    if (item != null){
    pipe.zadd("viewed:" + token, timestamp, item);
    pipe.zremrangeByRank("viewed:" + token, 0, -26);
    pipe.zincrby("viewed:", -1, item);
    }
    pipe.exec();
    }


    9、过期时间:

       persist key:移除过期时间 ttl key //查看给定键距离过期还有多少秒 查询结果 -1 没有设置过期时间;-2 已经过期
      expire "key" time:设置过期时间《单位:秒》
      expireat key timestamp :将给定的键的过期时间设置为unix时间戳
      pttl key: 查看给定键过期时间还有多少毫秒
      pexpire key milliseconds :让给定键在指定的毫秒后过期
      pexpireat key : 将一个毫秒级的unix时间戳设置为给定的过期时间

      当键的值被:set、getset、*store在内的命令,键的过期时间会被清除。
      当被一个重名的key,会冲掉过期时间。


    10、排序sort

       sort key [BY pattern]
      [LIMIT offset count] //限制排序返回数量 offset开始下标 count返回数量
      [GET pattern [GET pattern ...]]
      [ASC|DESC] //ASC 默认升序 | desc 降序
      [ALPHA] //费字符排序
      [STORE destination] //按照权重排序


    11、发布与订阅

       subscribe channel [channel ...] 订阅给定的一个或多个频道
      unsubscribe channel [channel ...] 退订一个或多个频道
      publish channel message 向给定的一个频道发送消息
      psubscribe pattern [pattern ...] 订阅与给定模式匹配的所有频道
      punsubscribe pattern [pattern ...] 退订给定模式,如果执行时没有给定任何模式,那么退订所有模式


    12、事务概念

       redis的基本事务涉及到MULTI(开始)、EXEC(结束);还有WATCH、UNWATCH、DISCARD
      执行流程:MULTI : 逐条操作;EXEC 结束;当redis接收到multi命令时会将之后的每一条操作都存放到队列中去;直到接收到exec结束;
      开始执行每条操作;遇到错误全部回滚



    三、持久化
    1、快照(Snapshotting)
    可以在某一时刻将所有数据全部写入硬盘

    2、只追加文件(AOF)
    只有当执行写入命令才进行磁盘写入。

    0、RDB 快照
    RDB持久化方式;redis在本地生成一份RDB二进制文件,当需要恢复数据,或持久化到数据库时,可使用RDB文件进行。
    1.1、生成RDB文件的三种方式:
    save: 在执行数据返回前首先保存至本地RDB文件中,然后进行结果返回。(同步执行),数据量较大容易造成单线程阻塞。执行策略,当本地已经存在RDB文件时,生成一份新的文件,之后替换旧的RDB文件。
    bgsave: 执行完Redis操作直接返回,异步进行更新本地RDB文件。(异步执行),生成一个fork()子进程执行保存。
    自动:定时进行更新本地RDB文件。需要满足下列条件之一后执行:
    配置 seconds changes
    save 900s 1条
    save 300s 10条
    save 60s 1000条

    修改配置:
    redis.conf
    dbfilename dump.rdb 修改默认文件名
    dir ./ 修改默认存储文件夹
    stop-writes-on-bgsave-erroe yes
    --------------------------------------------------------------未完待续,20190706

  • 相关阅读:
    “==” 和 Equals()
    数据持久层的设计
    Jquery Validation :多个按钮都需要做提交验证的解决方案
    留住异常的堆栈信息【throw ex 和 throw 的区别】
    [转] eval() may be evil
    框架结构和脚本跨域的问题
    ue4 材质MipLevels
    spring+json+jquery
    a different object with the same identifier value was already associated with the session错误
    kali 更新国内apt源 (转)
  • 原文地址:https://www.cnblogs.com/axuduo/p/11142838.html
Copyright © 2011-2022 走看看