Redis学习笔记

    科技2025-10-27  6

    一,Redis介绍

    (1)Redis:

    三个特点:

      (2)Redis与传统关系型数据库数据模型的区别,传统关系型数据库使用ER图(1:1/1:N/N:N,主外键等),nosql则可以使用BSon构建数据模型。两者对比,高并发的操作不建议有太多关联查询,因此互联网公司使用冗余数据来避免关联查询,分布式事务支持不了太多的并发。因此在互联网分布式系统中可以使用redis聚合数据模型来提升查询性能(如下数据结构的数据放入内存避免多表关联查询)。

    (3)传统关系型数据库事务特点:Atomicity(原子性)、Consistency(一致性)、Isolation(独立性)、Durability(持久性)。  

    CAP理论:

    Consistency(强一致性) 、Availability(高可用性)、Partition tolerance(分区容错性)

    CAP只能3选2,由于当前网络硬件会存在延迟丢包, ,因此分区容错性必须满足,因此只能在强一致性和高可用性之间权衡。

    CA:传统Oracle数据库。

    AP:是大多数网站架构的选择,AP+BASE

    CP:Redis、MongoDB

     

    二,redis数据类型

      (1)键key

      (2)字符串string

      (3)列表list

      (4)集合set

     

      (5)哈希hash

     

      (6)有序集合zset

     

    三,redis常用配置文件

    https://blog.csdn.net/suprezheng/article/details/90679790

    #######################    MEMORY MANAGEMENT    ##########################

    redis配置的最大内存容量。当内存满了,需要配合maxmemory-policy策略进行处理。注意slave的输出缓冲区

    是不计算在maxmemory内的。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些

    maxmemory 122000000

     

    #内存容量超过maxmemory后的处理策略。

    #volatile-lru:利用LRU算法移除设置过过期时间的key。

    #volatile-random:随机移除设置过过期时间的key。

    #volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)

    #allkeys-lru:利用LRU算法移除任何key。

    #allkeys-random:随机移除任何key。

    #noeviction:不移除任何key,只是返回一个写错误。

    #上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。redis将不再接收写请求,只接收get请求。写命令包括:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort。

    # maxmemory-policy noeviction

     

    # lru检测的样本数。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除

    # maxmemory-samples 5

    # 是否开启salve的最大内存

    # replica-ignore-maxmemory yes

    四,redis常用命令:

    http://redisdoc.com/五,redis持久化

      (1)持久化之RDB(Redis DataBase):  在指定的时间间隔内将内存中的数据集快照 写入磁盘,也就是Snapshot,恢复时将快照文件直接读入内存中。  

      Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,等持久化过程结束,会使用这个临时文件替换上次的持久化文件。优点:持久化过程主进程不进行IO操作,性能高。如果需要进行大规模数据的恢复,而且对于恢复数据的完整性不是非常敏感,那么RDB方式比AOF更加高效。缺点:1,如果Redis意外宕机,RDB最后一次持久化后的数据修改可能会丢失。2,fork时,内存中的数据被克隆了一份,内存大致2倍的膨胀性需要考虑。

    RDB默认保存的是dump.rdb文件。

    配置文件中RDB持久化默认触发策略: save   900  1   (15min内有1个key被改动)

    save   300  10 (5min内有10个key被改动)

    save   60   10000  (1min内有10000个key被改动)

    #save  " "     (不触发RDB持久化)

    save命令可以直接触发RDB持久化,只管保存,会导致阻塞。

    bgsave命令也可以触发RDB持久化,redis会在后台异步进行快照操作,同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间。

    flushall命令会触发持久化,但持久化文件是空的。

      (2)持久化之AOF(Append Only  File):   将所有写操作记录到文件中,默认每秒写一次,恢复时将该文件重新执行一遍。 

      优点:数据完整性好。 缺点:持久化文件大,恢复启动速度慢。

    appendonly.aof和dump.rdb可以同时存在,同时存在redis启动时会读取appendonly.aof

      appendonly.aof文件损坏会导致启动失败。

      命令:redis-check-aof --fix appendonly.aof   可以修复appendonly.aof文件

    rewrite机制:AOF采用文件追加方式,文件会越来越大为了避免出现这种情况,新增了重写机制,当AOF文件的大小超过了所设定的阈值时(默认为超过原来大小一倍且超过64M时触发),Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof触发。

     

    六,redis事务

      MULTI 开启事务(后面的命令会放入队列,提交时序列化执行)

      EXEC 提交事务

      DISCARD 取消事务

      WATCH  可以监控一个或多个key,如果key在事务提交前被其他改动,则事务将被打断

      UNWATCH 取消监控key

      如果开启事务后,后面的命令入队时报错,那么会导致事务整体失败。

      如果开启事务后,后面的命令正常入队,执行时报错,那么提交时事务中其他命令可以正常执行。

      悲观锁:每次拿数据时就加锁再执行操作(上厕所先关门)

      乐观锁: 不对数据加锁,修改前对比version,没有被其他人动过则成功操作,否则失败。

      CAS:Compare And Swap(比较并替换)

     更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。 Synchronized属于悲观锁,悲观地认为程序中的并发情况严重,所以严防死守。CAS属于乐观锁,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。CAS只能保证一个共享变量的原子操作

     

    七,Jedis

         Jedis连接池(单例模式)

    九,其他

        (1)主从复制matser-slave:

            1,Master以写为主,slaver以读为主,一般一主二从。             非哨兵模式下主机挂掉,从机身份不变,等待主机。

                从机挂掉需要重新执行slaveof命令连接主机,除非写入配置文件redis.conf。

            2,配从不配置主库:slaveof  主IP +端口

            3,哨兵模式

            4,缓存穿透:布隆过滤器

            5, 缓存雪崩

     

        (2)消息发布订阅:

         a,SUBSCRIBE C1 C2 C3 (一次订阅了C1 C2 C3三个频道)

         b,PUBLISH C2 hello_redis(消息发布)

         c,PSUBSCRIBE  new* (订阅多个,通配符*)

     

     

     

     

     

    Processed: 0.011, SQL: 8