zoukankan      html  css  js  c++  java
  • redis缓存

    redis特性

    • 提供String,list,set,zset,hash等数据结构的存储,redis支持数据的备份,即master-slave模式的数据备份,redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

     

    redis的list结构相关的操作

    • Redis的listNode节点可以看作是一个双向的链表,节点内部存的值,是一个void *的指针
    • 插入操作:lpush,rpush,linsert
    • 删除操作:lpop,rpop
    • 查看操作:lrange,llen,lindex
    • 修改操作:lset

    redis和memcached的内存管理的区别

    • Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部,当需要释放内存的时候,ret_ptr被传给内存管理程序,通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存
    • Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题

    redis分布式锁

    加锁

    • jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime)
    • 第一个参数为key 因为是唯一的,可以用来当锁
    • 第二个参数requestId为value,需要知道这把锁是哪个请求加的,在解锁的时候就可以有依据
    • 第三个参数为填的是NX,意思是SET IF NOT EXIST,即当key不存在时,我们进行set操作,若key已经存在,则不做任何操作
    • 第四、第五参数为设置过期时间 

    解锁

    • 获取锁对应的value值,检查是否与requestId相等,如果相等则删除锁(解锁)

    redis事务

    redis通过multi、discard、exec和watch四个命令来实现事务功能
    • multi用来组装一个事务
    • exec用来执行一个事务
    • discard用来取消一个事务
    • watch用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行
    • 当客户端发出multi命令后,这个连接会进入一个事务上下文,该连接后序的命令并不是立即执行,而是先放到一个队列中,当此连接接受到exec命令后,redis会顺序执行队列中的所有命令,并将所有命令的运行结果打包一起返回给客户端,结束事务上下文

    redis事务的CAS操作

    • watch指令在redis事务中提供了CAS的行为,watch 命令会监视给定的每一个key,当exec时如果监视的任一个key自从调用watch后发生过变化,则整个事务会回滚,不执行任何动作

    redis持久化

    • Redis支持两种持久化的方式,分别是是RDB(Redis DataBase)和AOF(Append Only File)
    • RDB,将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rd
    • AOF,将redis执行过的所有写执行记录下来,在下次redis重新启动时,只要把这些执行从前到后再重复执行一遍,就可以实现数据恢复了

    redis主从复制与虚拟内存

    • 主从复制:Slave从节点启动并连接到Master之后,主动发送一个SYNC命令。Master节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。Slave从节点在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步
    • 虚拟内存:暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的 内存空间用于其他需要访问的数据
  • 相关阅读:
    尝试制作了一个Panorama
    Python小游戏之猜数字
    Java基础-多线程学习目录
    Java8学习笔记目录
    Guava学习笔记目录
    Angular4学习笔记-目录汇总
    Springboot学习笔记
    JavaWeb-Tomcat阀
    JavaWeb-Tomcat安全域
    JavaWeb-Servlet基础
  • 原文地址:https://www.cnblogs.com/kangaroohu/p/9607852.html
Copyright © 2011-2022 走看看