zoukankan      html  css  js  c++  java
  • redis

      1.redis五种基本的数据结构

    • string---String
    • hash---HashMap
    • list--- LinkedList
    • set---HashSet
    • sorted-set---TreeSet

    string类型基本操作

    #添加/修改数据
    set key value
    #获取数据
    get key
    #删除数据
    del key
    #添加/修改多个数据 Multiple
    mset key1 value1 key2 value2...
    #获取多个数据
    mget key1 key2...
    #获取数据字符个数(长度)
    strlen key
    #追加信息到原始信息后部(如果原始信息存在就追加,不存在新建)
    append key value
    
    #设置数值数据增加指定范围的值
    incr key  #默认增加1
    incrby key increment #增加为负数就是减少
    incrbyfloat key increment  #专门针对小数
    #设置数值数据减少
    decr key
    decrby key increment
    
    #设置数据具有指定的声明周期
    setex key seconds value
    psetex key milliseconds value

    hash类型基本操作

    #添加/修改数据
    hset key field value
    #获取数据
    hget key field
    hgetall key  #获取所有数据
    #删除数据
    hdel key field1 field2...
    
    #添加或修改多个数据
    hmset key field1 value1 field2 value2...
    #获取多个数据
    hmget key field1 field2...
    #获取哈希表中字段的数量
    hlen key
    #获取哈希表中是否存在指定的字段
    hexists key field
    
    #获取哈希表中所有的字段名或字段值
    hkeys key
    hvals key
    #设置指定字段的数值数据增加指定范围的值
    hincrby key field increment
    hincrbyfloat key field increment

    list类型基本操作

    #添加或修改数据
    lpush key value1 [value2]...  #左边添加修改
    rpush key value1 [value2]...  #右边添加修改
    #获取数据
    lrange key start stop   #list数据从0开始
    lindex key index
    llen key
    #获取并移除数据 ,一个一个的移除
    lpop key
    rpop key
    
    #规定时间后去并移除数据
    blpop key1 [key2] timeout
    brpop key1 [key2] timeout
    #移除指定数据
    lrem key count value

    set类型数据基本操作

    #添加数据
    sadd key member1 [member2]
    #获取全部数据
    smembers key
    #删除数据
    srem key menber1 [menber2]
    #获取集合数据总量
    scard key
    #判断集合中是否包含指定数据
    sismember key member
    .....
    扩展操作比较多:集合的交并差等等

    sorted_set类型数据的基本操作

    #添加数据
    zadd key score1 member1 [score2 member2]
    #获取全部数据
    zrange key start stop
    #删除数据
    zrem key member [member ...]
    
    .....
    扩展操作也比较多

    2.RDB和AOP数据持久化

    RDB:记录数据的变化

    AOF:记录操作步骤的变化

    #默认方式就是RDB方式持久化
    save   #RDB方式的持久化命令
    
    #save指令的相关配置
    dbfilename dump-端口号.rdb   #设置本地数据库文件名
    dir 路径                                  #设置存储路径
    rdbcompression yes               #设置储存到本地数据库时是否压缩数据
    rdbchecksum yes                   #是否进行rdb文件格式校验
    
    
    #save指令会阻塞redis服务,一般线上不使用,而是使用bgsave
    
    bgsave                                    #不是立即执行的,非阻塞
    
    
    
    
    #AOF持久化
    
    #AOF功能开启yes|no
    appendonly yes
    #AOF持久化文件名
    appendfilename "appendonly-6379.aof"
    #AOF写数据的三种策略always|everysec|no
    appendfsync everysec

    AOF重写

    解决的问题:

    • 无效的数据不再写入文件
    • 忽略无效指令
    • 对同一数据的多条写命令合并为一条命令
    #第一种后台指令
    bgrewriteaof
    #自动重写
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb

    3.redis事务

    #开启事务
    multi    #设定事务的开启位置
    #执行事务
    exec     #设定事务的结束位置
    #取消事务
    discard  #事务定义过程中出现了问题,数据赋值错误等
    #事务过程中,命令格式输入错误 整体事务不会执行
    #事务过程中,命令执行出现错误,正确的执行错误的不执行
    注意!对已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己在代码中实现回滚

    4.锁

    #监视锁的作用是监控key变不变的
    #对key添加监视锁
    watch key1 [key2.....]
    #取消对所有key的监视
    unwatch
    
    #分布式锁解决的问题
    #设置公共的锁
    setnx lock-key value
    del lock-key释放锁
    
    #分布式锁改良
    #为锁key添加时间限定,到时不释放,放弃锁
    expire lock-key second
    pexpire lock-key millseconds

    5.数据删除策略

    • 定时删除       
    • 惰性删除
    • 定期 删除

    删除策略对比

    定时删除 节约内存,无占用 不分时段占用cpu资源,频度高 拿时间换空间
    惰性删除 内存占用严重 延时执行,cpu利用率高 拿空间换时间
    定期删除 内存定期随机清理 每秒花费固定的cpu资源维护内存 随机抽查,重点抽查

    6.数据逐出算法

    redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,就需要删除一些数据为当前指令清理存储空间

    #最大可使用内存
    maxmemory
    #每次选取待删除数据的个数
    maxmemory-samples
    #删除策略  8种
    maxmemory-policy     #不详细展开

    7.redis高级数据类型

    • Bitmaps 位
    • HyperLogLog 基数统计
    • GEO 坐标

    8.主从复制(集群中的问题)

    为了避免单点redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现reids的高可用,同时实现数据冗余备份

    原理!!!重点

    9.哨兵模式

    用于主从结构中每台服务器进行监控,当出现故障时及时通过投票机制选择新的maste并将所有的slave连接到新的master。

    哨兵的作用:

    • 监控:不断的检查master和slave是否正常运行
    • 通知:当被监控的服务器出现故障,向其他(哨兵,客户端)发送通知
    • 自动故障转移:断开连接,选取无故障的连接

    10.企业级解决方案

    • 缓存预热

      系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免用户请求,先查询数据库再将数据缓存的问题

    • 缓存雪崩

      瞬间过期数据量太大,导致对数据库服务器造成压力,未命中redis后,发起了大量对同一数的数据库访问

    • 缓存击穿

      单个高热数据过期的瞬间,数据访问量较大

    • 缓存穿透

      访问了不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库造成压力

    • 性能指标监控
        • 性能指标:Performance
        • 内存指标: Memory
        • 基本活动指标: Basic activity
        • 持久性指标: Persistence
        • 错误指标:Error
  • 相关阅读:
    vue app项目 第一天 基本架构和路由配置
    uni-app真机调试报错request:fail abort解决方法
    C#中的虚函数virtual
    ASP.NET Core中返回 json 数据首字母大小写问题
    ASP.NET Core中使用Cache缓存
    ASP.NET Core WebApi使用ActionFilterAttribute过滤器
    ASP.NET Core WebApi使用JWT认证
    微信小程序自动识别收货地址
    开发常用网站
    微信小程序自定义导航栏组件
  • 原文地址:https://www.cnblogs.com/baconZhang/p/13603138.html
Copyright © 2011-2022 走看看