全网最全Redis学习

时间:2022-09-15 20:51:32

一.Redis简介
Redis是以Key-Value形式进行存储的NoSQL数据库,C语言进行编写的。平时操作的数据都在内存中,效率特高,读的效率110000/s,写81000/s,所以多把Redis当做缓存工具使用。同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
对于上述提到的NoSQL数据库,常见NoSQL数据库:memcached :键值对,内存型数据库,所有数据都在内存中。Redis:和Memcached类似,还具备持久化能力。HBase:以列作为存储。MongoDB:以Document做存储。

二、Redis常用五大类型
Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储,它还支持数据的备份,即master-slave模式的数据备份,同样Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis支持的五大数据类型包括String(字符串 用法: 键 值),Hash(哈希 类似Java中的 map 用法: 键 键值对),List(列表 用法:键 集合 不可以重复),Set(集合 用法:键 集合 可以重复),Zset(sorted set 有序集合 用法: 键 值 值)

三、Redis常用命令
可参考https://www.redis.net.cn/order/

四、Redis持久化策略
Redis不仅是内存型数据库,还有持久化能力,持久化策略有两种:RDB、AOF。
rdb文件是一个紧凑文件,直接使用rdb文件就可以还原数据。数据保存会由一个子进程进行保存,不影响父进程。恢复数据的效率要高于aof。缺点就是:每次保存点之间导致redis不可意料的关闭,可能会丢失数据。由于每次保存数据都需要fork()子进程,在数据量比较大时可能会比较耗费性能。
AOF默认是关闭的,需要在配置文件中开启AOF。Redis支持AOF和RDB同时生效,如果同时存在,AOF优先级高于RDB(Redis重新启动时会使用AOF进行数据恢复)。监听执行的命令,如果发现执行了修改数据的操作,同时直接同步到数据库文件中。相对RDB数据更加安全。缺点:相同数据集AOF要大于RDB。相对RDB可能会慢一些。可以通过修改redis.conf,可将appendonly修改为yes,appendfilename "appendonly.aof"。

五、Redis主从复制
支持集群功能,为保证单一节点可用性,支持主从复制功能。每个节点有N个复制品,其中一个复制品是主,另外N-1 复制品是从,即支持一主多从:一个主可有多个从,而一个从又可以看成主,它还可以有多个从。优点是:(1)增加单一节点健壮性,提升整个集群稳定性。(Redis中当超过1/2节点不可用时,整个集群不可用)。(2)从节点可以对主节点数据备份,提升容灾能力。读写分离。(3)在redis主从中,主节点一般用作写(具备读的能力),从节点只能读,利用这个特性实现读写分离,写用主,读用从。
一主多从搭建:

  • 新建目录:madir /usr/local/replica
  • 复制目录:把之前安装redis单机中的bin目录复制一下,cp -r /usr/local/redis/bin /usr/local/replica/master\ cp -r /usr/local/redis/bin /usr/local/replica/slave1
    cp -r /usr/local/redis/bin /usr/local/replica/slavel2
  • 修改从的配置文件 。修改两个从的redis.conf,制定主节点ip和端口,并修改自身端口号防止和其他redis冲突。vim /usr/local/replica/slavel/redis.conf * 指定主节点ip和端口号 replicaof ip.port
  • 修改完之后,启动redis实例:cd /usr/local/replica vim startup.sh在文件添加三个redis实例:如: ./redis-server redis.conf;赋予权限:chmod a+x startup.sh;开启:./startup.sh; 查看启动状态:ps -ef|grep redis;测试一下:cd /usr/local/replica/master/; ./redis-cli;在进入到slave查看数据是否同步。cd /usr/local/replica/slavel; ./redis -cli -p 6380

六、哨兵
用于控制上述的主从,当主宕机,节点不具备写能力,让一个从变成主,使整个节点继续工作,Redis哨兵就是帮助控制整个节点,干这个事情的。Redis支持但哨兵和多哨兵,单哨兵只要哨兵发现master宕机,直接选取一个master;多哨兵是根据人为设定,当达到一定数量哨兵才认为master宕机,在进行重新选主。

七、集群
当集群中超过或等于1/2节点不可用时,整个集群不可用。为了搭建稳定集群,都采用奇数节点。建立集群时,需要借助ruby脚本实现集群,在redis5中可以使用自带的redis-cli实现集群功能。集群测试的命令:./redis-cli -p port -c。

八、Jedis
Redis给java语言提供客户端API,称之为Jedis。Jedis API特别简单,基本都是创建对象调用方法。
单机版

点击查看代码
public void testStandalone(){
    Jedis jedis = new Jedis("ip",port);
    jedis.set("name","m-standalone");
    String value = jedis.get("name");
    System.out.println(value);
}

带有连接池

点击查看代码
public void testPool(){
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(20);
    jedisPoolConfig.setMaxIdle(5);
    jedisPoolConfig.setMinIdle(3);
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,"ip",port);
    Jedis jedis = jedisPool.getResource();
    jedis.set("name","my-pool");
    String value = jedis.get("name");
    System.out.println(value);
}

九、springboot整合Redis
十、Redis作为缓存使用>