记一次Redis的学习

    xiaoxiao2023-11-22  42

    最近大致在学习了一遍Redis相关的知识,这里只是做简单的记录。如果有遗落的和很多没说到的方面的知识,还希望各位能够指出来,多多指教,一起学习,一起进步。

        首先得明白什么是Redis?

           Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。这是简单得介绍了下Redis。

            单线程的Redis: 

            好处:没有多线程或者多进程的切换来消耗CPU;Redis也是线程安全的。

            坏处:无法发挥多核CPU的性能。

      Redis的一些基本使用场景有那些?

            Token的生成(现在许多分布式或者微服务项目中;使用的Token都会存放Redis中;并且设置相应的过期时间)         缓存;对一些查询频繁很高的内容进行缓存,那样在很大的程度上减少了DB那层的压力。(不过也有很多人会利用你的Key设计漏洞,也对你进行缓存穿透)         一些短信验证码也会存在Redis中         使用Redis实现分布式锁(估计这也是很多刚刚学习分布式朋友最感兴趣的)

    这是一些Redis使用比较多的场景,还有其他的场景,请各位大佬在下面评论加上。

       如何在Linux上安装Redis?(这里作者使用的是Centos7)

        wget http://download.redis.io/releases/redis-3.2.9.tar.gz    直接在Linux上下载Redis安装包

         tar -zxvf redis-3.2.9.tar.gz    解压Redis安装包

         cd redis-3.2.9   进入解压下的Redis目录

         make编译    make之前请先确保你有相应的环境 (yum -y install gcc-c++)  如果没在make会出现报错。https://blog.csdn.net/weixin_40493969/article/details/81150469  给出相应的处理地址。

    cd src 进入src目录下

    make install PREFIX=/usr/local/redis   安装到usr/local/redis下

    mkdir ../../../usr/local/redis/etc  当你当前的路径下,/usr/local/redis下创建etc目录

    mv ../redis.conf /usr/local/redis/etc/    移动配置文件去你/usr/local/redis/etc目录下

    cd /usr/local/redis/etc/  进入你redis下修改配置文件

     vi redis.conf  将daemonize no 改成daemonize yes  这个是后台启动    requirepass 123 这个是修改密码 看个人

    /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf   这是启动Redis指令

    cd /usr/local/redis/bin    ./redis-cli -h 127.0.0.1 -p 6379   ping 这是会显示PONG就说明你安装成功。

     如果是本地Vm安装的虚拟机,在使用连接工具的时候,记得关闭防火墙(温馨提示)。#bind 127.0.0.1 开启外网访问

       Redis的基本类型有哪些?

      String类型

    .Redis的存储方式是键值对,这里Value不仅仅可以是String,也可以是数字。String在Redis内部存储默认是一个字符 串,被     redisObjecy所引用。当有incr,desc等操作是.会转变成数值类型进行计算。

      List列表

       Reids中的list的实现为一个双向链表,是可以正反查询的。同时会有额外的内存开销。List有很多应用场景,比如一些展示的列表等。下面是简单的list操作。

    Hash类型  字典类型

    Redis中的Hash中Value对用的就是一个HashMap(Java中,作者是Java开发).当Hash的成员比较少的时候,Redis会采用类似于一维数组的方式来紧凑存储,而不是真正的HashMap格式.当成员增大时,就会转成真正的HashMap。

    Set 类型  集合

    唯一无需集合。也就是说集合中不可能出现重复的。集合都是用过哈希表来实现的,所以复杂度都是O(1)

    Sorted Set 有序集合

    Redis中的有序集合,也是唯一的,也就是说没有重复的元素。每个元素都会关联一个double类型的分数,然后通过分数来为集合中的成员进行从大到小的排序。有序集合的成员是唯一的,但是分数是可以相同的。集合也是通过哈希表来实现的。

     

      Redis的主从复制

       1. redis的复制功能是支持多个数据库之间的同步。也就是主从数据库(主数据库Master;从数据库slave).一般主数据库可以进行读和写;从数据库一般都是读。然后从数据库接收主数据库通过过来的数据。一个主数据库可以有多个从数据库,而一个从数据库一般只有一个主数据库。

      2. 通过Redis的复制功能可以很好的实现数据库的读写分离,提供服务器的负载能力。

      主从复制的过程:

      1. 当一个从数据库启动时;会向著数据库发送sync命令。

      2. 主数据接收sync命令后,会开始在后台保存快照,也就是默认的rdb文件。

      3. 当快照完成后,Redis会将快照文件和所有的缓存的命令发送给从数据库。

      4. 从数据库收到后,会载入快照文件并执行收到缓存的命令。

    图画到比较粗糙;各位大佬将就着看下。

    主从复制就修改下配置文件:

    修改slaveredis redis.conf文件

    slaveof 192.168.30.128 6379  (这里写主服务)

    masterauth meng  (如果你主服务器中有密码;这里也要相应的加上密码)

     

    Redis的持久化?

      Redis的持久化是有二种实现方法的。

      RDB是以二进制文件,在哪一个时刻将数据写入一个临时节点,持久化结束后,用这个临时文件替换上次持久化的文件,来恢复数据。

    优点:使用单独子进程来进行持久化;主进程不进行任何IO操作。保证了Redis的高性能。

    缺点:由于是间隔时段持久化,就会有数据丢失问题。RDB是默认开启的。

     AOF(Append only file)持久化:

       优点:可以保持数据的完整性。

       缺点:  AOF文件比RDB文件大,恢复速度慢。

    AOF可以简单的理解为就是日志文件,此文件只会记录记录的操作。如果有大量的变更操作,也就是以为AOF文件很大,数据恢复会是一个长时间。实际情况;一条数据经过多次的变更,将会有很多AOF记录生成,其实只用保证当前的,之前的该条历史记录是可以抛弃的。AOF很大程度上保证的数据的完整性,因为你每次有操作,都会有AOF记录。AOF是默认关闭的,开启方式是:

    修改配置文件 reds.conf:appendonly yes

    AOF和RDB之间的区别?

    可以从上面的优缺点可以看出二者之间的区别。

    Redis的事务?

     一个事务从开始到执行过程会经过:

    开始事务  ----  命令入队  -----  执行事务.

    已multi 开启事务  然后命令入队  最后由exec 命令触发事务,一起执行事务中的所有的命令。

     

    还有关于Redis的集群和基于Redis实现分布式锁的文章,会在之后的更新中讲到。如果有错误的地方和不是很详细的地方,还希望各位大佬能够在评论中指出,我们一起学习,一起进步。

    最新回复(0)