美文网首页
redis学习笔记

redis学习笔记

作者: 奋斗的韭菜汪 | 来源:发表于2021-12-03 10:12 被阅读0次

    redis字段使用http://redisdoc.com/index

    五种数据类型:String、 list、 hash、 set、 sorted set(有序集合)

    String:

    redis支持哪几种数据结构:字符串,整数,浮点,INCR
    在redis内部,string的数据结构int/sds
    key的命名:体现namespace
    使用场景:
    list:双向链表 lpush,rpush
    redis3.2之前linkedlist和ziplist
    redis3.2之后quicklist双向链表,每个节点是ziplist(由ziplist组成的双向链表)
    使用场景:1、消息队列(生产者lpush, 消费者brpop);2栈(后进先出 lpush lpop)
    3、队列(先进先出 (lpush rpop))

    hash类型
    hash有两种结构hash、ziplist(数据量小的时候)
    hset userinfo age 18
    hset userinfo name zhansan
    hget....

    哈希冲突时rehash:将dict[0]的数据迁移到dict[1]内

    使用场景:

    集合类型(set),不允许重复,无序

    sadd bbs "bbs.gupao.com" "csdn.com"

    smember bbs

    数据结构 intset(整数)、hashtable(key, value(null)只使用key)

    (sortedset)有序集合:

    zrange

    zrerange

    数据结构 ziplist或者 skiplist+ hashtable

    使用场景:

    keys * :查看所有的key,生产环境慎用

    ttl key :查看key的过期时间还剩多少

    过期时间(超时时间)设置

    expire key seconds

    setex(String key, int seconds, String value)

    消极方法(passive way),当引用访问key时发现key已经失效,会将key删除

    积极方法(active way),周期性去已设置过期时间的key中选择一部分(随时测试)的key进行删除

    1、随机测试20个带有timeout信息的key

    2、如果超过25%的key被删除,会重复随机测试

    redis持久化

    RDB:快照的模式,当符合条件的时候,redis会fork子进程(比较耗性能),通过子进程将数据进程写入临时文件,等到持久化过程结束以后,会生成dump.rdb快照文件(如果文件存在会覆盖)

    条件: 1、配置规则(save seconds changes):在seconds秒内有changes个以上key被更改过

    save 900 1

    save 30 1 0

    save 60 1 0000

    以上三个满足一个就能触发持久化

    2、save命令 (会阻塞所有客户端的请求)或者

    bgsave(不会阻塞,后台异步处理持久化)

    3、flushall清楚所有内存数据,只要配置了配置规则,就会执行快照

    4、执行复制操作(主从复制操作)

    RDB,的缺点:上一次快照执行结束和下一次执行开始的空档期数据会丢失

    AOF:默认是关闭的,(appendonly yes)类似一个日志的概念

    保证数据最少的丢失,

    性能会比RDB低,因为每次事务操作,会写入磁盘里面文件(appendonly.aof)

    appendfsync everysec 默认每秒同步一次到磁盘文件内(从系统缓存)

    可以同时配置两种方式(rdb和aof)

    如果aof 和rdb都开启了会优先使用aof的方式

    redis内存回收策略

    LRU

    物理内存是1G,如果物理内存不够的话,操作系统会从磁盘分配一个虚拟内存

    内存回收策略:

    maxmemory-policy noeviction

    allkeys-lru 最少使用的数据去淘汰

    allkeys-random 随机淘汰数据

    volatile-random(随机的) (已设置过期时间)

    volatile-lru(使用最少的) (已设置过期时间)

    volatile-ttl(即将过期的) (已设置过期时间)

    redis单线程为什么性能很高

    (多线程很好的利用了多核心cpu,redis的瓶颈不在cpu利用率上)reids的主要瓶颈是内存和网络

    redis key不要设置的过长,会影响网络传输,从而影响性能

    redis性能高是由于使用了多路复用

    同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

    redis使用lua脚本实现原子性(可以解决秒杀超卖问题,也可以用消息队列)

    redis集群

    数据同步(数据一致性)

    选主

    主从配置(slaveof ip port)

    主:配置文件中bind参数指定那些服务器可以访问,注释掉

    从:配置文件设置 slaveof ip port(主服务器ip+主服务器port),

    info replication 查看redis服务器状态

    master_link_status:up 表示已连接上主redis

    原理:全量复制(初始化),增量复制,无磁盘复制

    从服务监听主服务命令:replconf listening-port 6379

    无磁盘复制(repl-diskless-sync-delay 5)不生成磁盘快照

    选主:(哨兵机制)master选举

    1、监控master和salve是否正常运行

    2、当master出现故障的时候,从slave中选举一个新的master

    sentinel(哨兵,支持集群)监控集群(哨兵也有个内部选举机制,队长 raft算法,多个哨兵同时监控redis集群)(leader选举过程,过半节点反馈同意选举节点为leader,在指定时间内倒计时,时间结束后选举自己,同时向其他节点发送心跳)

    +sdown master 主管认为master挂了

    +odown master 客观认为master挂了

    +new-epoch 1创建一个选举

    +vote-for-leader 投票leader

    +elected-leader选举leader

    failover-end

    redis 分片

    一致性hash -> codis(中间件工具,迁移,动态扩容和缩容,支持多cpu)

    reids集群

    gossip协议的无中心化节点的集群

    集群模式下,为什么会有MOVED的error?

    ./redis-cli -c -p 7000

    ->Redirected to slot.... 会重定向

    redis的java客户端

    jedis、redisson、lettuce

    redis实现分布式锁,setnx 设置过期时间防止死锁

    相关文章

      网友评论

          本文标题:redis学习笔记

          本文链接:https://www.haomeiwen.com/subject/vnrtdktx.html