分布式缓存——Redis

分布式缓存——Redis

一、简介

1、redis是什么?

  • REmote DIctionary Server(远程字典服务器)
  • 完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。
  • 能满足对海量数据的读写
  • redis的键只能是字符串
  • redis的值支持多种数据类型:
    • 字符串string
    • 哈希hash
    • 字符串列表list
    • 字符串集合set
    • 有序集合zset(sorted set)
    • HyperLogLog结构:redis2.8.9版本之后才有,用来做统计的算法
    • GEO结构:redis3.2版本之后才有,是地理位置相关的数据类型

2、redis的优点?

  • 高性能(redis读的速度是11w次/s,写的速度是8.1w/s)
  • 原子性(保证数据的准确性)
  • 持久存储(两种方式RDB快照,AOF日志)
  • 主从结构,主机会自动将数据同步到从机,可以进行读写分离
  • 从3.0版本开始,支持集群

3、redis的缺点?

  • 由于是内存数据库,所以,单台机器存储的数据量,跟机器本身的内存大小有关。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
  • 修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。

4、redis的主要功能?

  • 服务端的redis

    • 持久化(Persistence)

      redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。
      
    • 哨兵(Sentinel)和复制(Replication)

      Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能;Replication则是负责让一个Redis服务器可以配备多个备份的服务器。Redis也是利用这两个功能来保证Redis的高可用的。此外,Sentinel功能则是对Redis的发布和订阅功能的一个利用。
      
    • 集群(Cluster)

      Redis Cluster的具体实现细节则是采用了Hash槽的概念,即预先分配出来16384个槽:在客户端通过对Key进行CRC16(key)% 16384运算得到对应的槽是哪一个;在redis服务端则是每个服务器负责一部分槽,当有新的服务器加入或者移除的时候,再来迁移这些槽以及其对应的数据,同时每个服务器都持有完整的槽和其对应的服务器的信息,这就使得服务器端可以进行对客户端的请求进行重定向处理。
      
  • 客户端的redis

    • 数据类型

      • string:最基本的数据类型,二进制安全的字符串,最大512M。
      • list:按照添加顺序保持顺序的字符串列表。
      • set:无序的字符串集合,不存在重复的元素。
      • sorted set:已排序的字符串集合。
      • hash:key-value对的一种集合。
      • bitmap:更细化的一种操作,以bit为单位。
      • hyperloglog:基于概率的数据结构。
    • 事务

      redis事务支持一次性按顺序执行多个命令的能力,并保证其原子性
      
    • Lua脚本

      在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了(比如在获取某一个缓存的时候,同时延长其过期时间)。redis保证lua脚本的原子性,一定的场景下,是可以代替redis提供的事务相关的命令的。相当于基于网络应用的架构风格中介绍到的远程求值(Remote Evluation = REV)的具体实现。
      
    • 管道

      因为redis的客户端和服务器的连接时基于TCP的, 默认每次连接都时只能执行一个命令。管道则是允许利用一次连接来处理多条命令,从而可以节省一些tcp连接的开销。管道和事务的差异在于管道是为了节省通信的开销,但是并不会保证原子性。
      
    • 分布式锁

      官方推荐采用Redlock算法,即使用string类型,加锁的时候给的一个具体的key,然后设置一个随机的值;取消锁的时候用使用lua脚本来先执行获取比较,然后再删除key。
      

5、redis的应用场景?

  • 主要应用在高并发和实时请求的场景
  • 关注列表、粉丝列表
  • 微博数、粉丝数
  • 热门微博

6、redis版本下载?

二、redis安装

1、软件环境

  • Centos7
  • Redis3.0.4

2、安装准备

yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make tcl

3、redis的Linux版安装

  • 1、下载安装包,并移植到/usr/local/下

    链接: https://pan.baidu.com/s/11XaG8kuy13QWyIdXFXz2Tg  密码: mojq
    
  • 2、解压压缩包

    [root@node01 local]# tar -zxvf redis-3.0.4.tar.gz
    
  • 3、进入解压目录,输入make编译

    [root@node01 redis-3.0.4]# pwd
    /usr/local/redis-3.0.4
    [root@node01 redis-3.0.4]# make
    
  • 4、输入make install安装

    [root@node01 redis-3.0.4]# make install
    
  • 5、安装后的redis命令默认在/usr/local/bin目录

    [root@node01 bin]# pwd
    /usr/local/bin
    [root@node01 bin]# ll
    

4、redis的服务端(redis-server)启动

  • 输入redis-server

    [root@node01 bin]# redis-server
    
  • 可以修改配置文件,使之可以后台允许

    [root@node01 redis-3.0.4]# pwd
    /usr/local/redis-3.0.4
    [root@node01 redis-3.0.4]# vi redis.conf 
    
  • 搜索/daemon并修改配置

    /daemon
    
    daemonize  yes
    
  • 用修改之后的配置启动

    [root@node01 redis-3.0.4]# redis-server redis.conf 
    
  • 查看进程

    [root@node01 redis-3.0.4]# ps aux|grep redis
    root       2603  0.1  0.3 141004  7456 ?        Ssl  17:14   0:00 redis-server *:6379
    root       2607  0.0  0.0 112828   972 pts/0    S+   17:15   0:00 grep --color=auto redis
    

5、redis的客户端(redis-cli)启动

  • 输入redis-cli

    [root@node01 redis-3.0.4]# redis-cli 
    127.0.0.1:6379> 
    
  • exit退出

    127.0.0.1:6379> exit
    

6、redis测试

[root@node01 redis-3.0.4]# redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set username root
OK
127.0.0.1:6379> get username
"root"
127.0.0.1:6379> keys *
1) "username"
127.0.0.1:6379> 

7、redis服务器停止

  • 输入redis-cli shutdown

    [root@node01 redis-3.0.4]# redis-cli shutdown
    
  • 查看进程

    [root@node01 redis-3.0.4]# ps aux|grep redis
    root       2631  0.0  0.0 112828   972 pts/0    S+   17:19   0:00 grep --color=auto redis
    

三、redis其他知识

1、性能测试

  • 启动服务端

    [root@node01 redis-3.0.4]# redis-server redis.conf 
    
  • 测试get和set的性能

    [root@node01 redis-3.0.4]# redis-benchmark -t get,set
    ====== SET ======
      100000 requests completed in 0.44 seconds
      50 parallel clients
      3 bytes payload
      keep alive: 1
    
    100.00% <= 0 milliseconds
    226757.36 requests per second
    
    ====== GET ======
      100000 requests completed in 0.43 seconds
      50 parallel clients
      3 bytes payload
      keep alive: 1
    
    100.00% <= 0 milliseconds
    234192.05 requests per second
    
    

2、默认16个库,切库

[root@node01 redis-3.0.4]# redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> 

3、判断某个key是否存在

127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> EXISTS username
(integer) 1

4、为key设置过期时间

127.0.0.1:6379> set k k
OK
127.0.0.1:6379> EXPIRE k 10
(integer) 1

10意思就是10秒

5、查看key过期时间,-2代表已经过期,-1表示不过期

127.0.0.1:6379> ttl k
(integer) -2

6、查看key的类型

127.0.0.1:6379> set k k
OK
127.0.0.1:6379> type k
string

7、将key移动到其他库

127.0.0.1:6379> move k 2
(integer) 1
127.0.0.1:6379> EXISTS k
(integer) 0
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> EXISTS k
(integer) 1

四、redis.conf配置文件解析

1、redis.conf在哪?

2、Units单位,redis配置文件单位不区分大小写

3、INCLUDES包含,可以加入其它自定义配置文件

4、GENERAL通用,一些基本设置,包括端口号,守护进程等

5、NETWORK网络配置,配置一些超时时间等

6、SNAPSHOTTING快照,配置RDB持久化策略的位置

7、REPLICATION复制,配置主从复制的

8、SECURITY安全,设置redis密码

9、LIMITS限制,做一些连接和内存等的限制

10、APPEND ONLY MODE追加,配置AOF的位置

posted @ 2020-07-02 19:19  小皮浩  阅读(250)  评论(0编辑  收藏  举报