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将在本次执行这些数据修改命令,从而达到最终的数据同步
  • 虚拟内存:暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的 内存空间用于其他需要访问的数据
posted @ 2018-09-08 08:57  kangaroohu  阅读(111)  评论(0编辑  收藏  举报