Redis

一、Reids介绍

1.key

1.1 key 命令

1) keys*:查看

2) setnx:key 不存在时,为 key 设置指定的值。

3) exists key:判断key是否存在

4) move key db:移库

5) expire key :设置过期时间

6) ttl key:查看过期时间,-1永不过期,-2已过期。

7) type key:查看key类型。

8) del :删除已存在的键。不存在的 key 会被忽略。

1.2 key命名规范

key的命名规则 定义为 

MS-TEN:SESSION_KEY_IN_LOGIN_NAME:fqh

使用:进行分割,这样存入redis的是有层次结构的

 

二、Reids的五种基本类型:String、Hash、List、Set、ZSet。

1.String(简单动态字符串SDS)

1)设置值:set ,取值:get 删除值:del。set多次会覆盖。

2)setnx(not exist):不存在设置值,并返回1,存在返回0。

3)setex(expired):设置数据过期时间,例:setex color 10 red。10秒后过期,返回nil。

4)  setrange替换字符串:

5)strlen[name] 方法:获取字符串长度。

2.Hash(哈希表O(1)、压缩列表O(n)

1)设置值:hset,取值:hget,删除hash的field:hdel

2)hexists:是否存在key,存在:1,不存在:0。

3)   hkeys:获取key

4)   hvals:获取value

5)   hgetall:获取key和value

3.List(压缩列表O(n)、双向列表O(n)

1)添加:push

lpush:头部添加,栈,先进后出。

rpush:尾部添加,队列,先进先出。

2)插入:linsert

3)删除:lrem。

4.Set(哈希表O(n)、整数数组O(n))和ZSet(压缩列表O(n)、跳表O(logN) set:无序,ZSet:有序。Set通过hashtable实现。

1)sadd:添加

2)srem:删除

 4.1 什么是跳表?

   1)简单理解跳表是基于链表和二分查找思想实现的有序列表,跳表通过维护一个多层级的链表实现了快速查询效果将平均时间复杂度降到了O(logn)

       这是一个典型的异空间换时间数据结构。
   2)跳表结合了链表和二分查找的思想
   3)复杂度为O(logn)

5.Redis高级命令

6.Redis安全性

7.Redis主从复制:读写分离。

8.Redis事务

 multi:打开事务

 exec:执行

 discard:取消事务

9.Redis持久化机制

 9.1 快照 RDB

  1)save 60 10

 9.2 append-only file(aof):类似关系数据库中的undo,一般生产环境使用。

 

10.Redis哨兵模式

   10.1 原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

   10.2 哨兵的两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

11.redis缓存穿透、缓存击穿和缓存雪崩

     11.1 穿透:数据在缓存数据库都查询不到。主要是一些非法查询, 例如:解决方案:1)对参数进行合法性校验 2)对数据库中没有查询到的数据也放入缓存,value值设为null,有效期设置短一些。3)引入布隆过滤器

     11.2 击穿:缓存中没有,数据库中有。例如:热点缓存数据过期。解决方案:1)设置热点缓存永不过期

   11.3 雪崩:例如:大量缓存数据过期或缓存挂了(高可用集群部署)。解决方案:1)缓存数据设置不同的失效时间。

三、Jedis(java API)

 

四、redis的三种集群方式

 1.主从复制

    优点:读写分离

    缺点:主挂了,从不能写入数据。

 2.哨兵模式

   优点:主从复制+主从切换

   缺点:扩容复杂

3.Redis-Cluster集群   hash环

   优点:主从复制+哨兵模式+分布式存储。数据可以分开存储到不同的节点,支持扩容。

五、redis原理

1.Redis的设计模式

   Redis实现了发布与订阅模式。

2.Redis的通信协议

    Redis客户端与服务器交互采用RESP协议。RESP协议位于TCP层之上,即客户端和Redis实例保持双工的连接。

3.Redis为什么那么快?参考:redis为什么快?

   1)redis是纯内存操作。2)单线程避免了线程切换和竞态产生的消耗。3)Redis采用epoll作为I/O多路复用技术的实现。

4.Redis线程模型

Redis内部使用文件事件处理器,这个处理器是单线程的,所以redis是单线程的模型。它由套接字(socket)、I/O多路复用器、文件事件分派器(dispatcher),事件处理器四部分组成:

Redis的客户端与服务端的交互过程如下所示:

 

posted @ 2019-08-07 21:53  遇见神龙  阅读(182)  评论(0)    收藏  举报