zoukankan      html  css  js  c++  java
  • Redis的安装和基本操作01

    redis官网

    redis下载

    linux命令大全

    redis命令大全

    Redis做会话保持

    tiFRHI.md.png

    Redis学习

    一、Redis简介

    1.redis是什么

    Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储'NoSQL数据库'产品。
    Redis采用内存(In-Memory)数据集(DataSet) 。
    支持多种数据类型。
    运行于大多数POSIX系统,如Linux、*BSD、OS X等。
    
    redis就是非关系型数据库的一种,存储方式是:key:value
    

    2.redis的作用

    1.会话保持(键设置过期时间)
    2.缓存(放在数据库前面,memcache,mongodb),Redis数据存储在内存
    3.消息队列(kafka),一般与elk结合使用
    	利用Redis list类型
    

    3.为什么要用Redis

    1.redis'功能全面'
    2.redis企业使用率高
    

    4.redis优点

    1.高速读写
    	将所有数据存储在内存,单线程服务,使用C语言
    	#线程多,事件的处理速度不一定快
    	#redis性能稳定,硬件限制一般是内存
    2.部署简单,使用稳定
    3.'数据类型'丰富
        String: 字符串类型
        Hash: 哈希类型
        List: 列表类型
        Set: 集合类型
        Sorted set: 顺序集合类型
    4.支持'持久化'
    	将内存的数据写入磁盘
    5.多种内存分配及回收策略(#例:回收过去的session占用的内存)
    6.支持事物、锁
    7.消息队列、消息订阅
    8.支持'高可用'
    	哨兵模式(类似于MHA)
    9.支持'分布式'分片集群,企业中最少5个节点 一个副本
    	分布式: 1.数据分开存储 2.数据分开读取
    	副本:另一个节点的从库
    10.支持的'客户端语言'很多
    	java,php,python,nodejs,C语言
    

    5.redis帮助

    官方网站:https://redis.io/
    下载网站:http://download.redis.io/releases/
    帮助网站:http://redisdoc.com/
    

    6.缓存服务对比

    #Memcached:
    1.优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash多核结构、多线程读写性能高。
    2.缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高
    
    #Redis:
    1.优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高
    2.缺点:多线程读写较Memcached慢
    
    #Tair:
    1.优点:高性能读写、支持三种存储引擎(ddb、rdb、ldb)、支持高可用、支持分布式分片集群、支撑了几乎所有淘宝业务的缓存。
    2.缺点:单机情况下,读写性能较其他两种产品较慢
    
    #对比结论:
    1.Memcached:多核的缓存服务,更加'适合于多用户并发访问'次数(访问次数较少的应用场景)。
    2.Redis:单核缓存服务,在单节点情况下,更加'适合少量用户(web),多次访问'的应用场景。
    

    二、Redis使用场景

    1.缓存
    	放在'数据库前面'
    2.会话保持(生存时间)
    	登录cookie、session
    	折扣券,代金券
    3.排行榜(#Redis values排序)(socket set类型)
    4.计数器(#Redis values运算)(string类型)
    	论坛帖子点赞点踩
    5.社交软件(集合)(set类型)
    	QQ共同好友,微博共同爱好
    6.消息队列(list类型)
    	结合ELK做日志收集
    7.存储(hash类型)
    

    三、redis搭建

    1.下载软件包

    [root@db01 ~]# rz redis-3.2.12.tar.gz
    或者
    [root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
    

    2.安装依赖

    [root@db01 ~]# yum install -y gcc gcc-c++
    

    3.解压移动

    [root@db01 ~]# tar xf redis-3.2.12.tar.gz 
    [root@db01 ~]# mv redis-3.2.12 /usr/local/
    [root@db01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis
    

    4.安装

    方法一
    [root@db01 ~]# cd /usr/local/redis
    [root@db01 redis]# make && make install
    
    方法二(交互式)
    [root@db02 ~]# cd /usr/local/redis/utils/
    [root@db02 redis]# ll
    -rwxrwxr-x 1 root root 8529 Jun 13  2018 install_server.sh
    端口
    配置文件名字
    日志路径
    数据目录
    可执行文件
    
    

    5.启动redis

    不指定配置文件启动
    [root@db01 redis]# ./src/redis-server &
    
    [root@db01 redis]# netstat -lntp  
    tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      11759/./src/redis-s
    
    指定配置文件启动
    [root@db02 ~]# /usr/local/redis/src/redis-server /service/redis/6379/redis.conf
    
    连接Redis
    [root@db02 ~]# /usr/local/redis/src/redis-cli -a ''
    
    关闭Redis
    [root@db02 ~]# /usr/local/redis/src/redis-cli -a '' shutdown
    
    

    6.连接redis

    #配置环境变量,或者 cd /usr/local/redis/ && make install
    [root@db01 redis]# vim /etc/profile.d/redis.sh
    export PATH=/usr/local/redis/src:$PATH
    
    #连接
    [root@db01 redis]# redis-cli 
    127.0.0.1:6379> 
    

    7.关闭redis

    [root@db01 redis]# redis-cli shutdown
    11759:M 03 Aug 10:20:20.535 # User requested shutdown...
    11759:M 03 Aug 10:20:20.535 * Saving the final RDB snapshot before exiting.
    11759:M 03 Aug 10:20:20.546 * DB saved on disk
    11759:M 03 Aug 10:20:20.546 # Redis is now ready to exit, bye bye...
    [1]+  Done                    ./src/redis-server
    
    
    [root@db01 redis]# redis-cli 
    127.0.0.1:6379> shutdown
    11851:M 03 Aug 10:20:59.580 # User requested shutdown...
    11851:M 03 Aug 10:20:59.580 * Saving the final RDB snapshot before exiting.
    11851:M 03 Aug 10:20:59.584 * DB saved on disk
    11851:M 03 Aug 10:20:59.584 # Redis is now ready to exit, bye bye...
    not connected> quit
    [1]+  Done                    ./src/redis-server
    

    四、redis配置文件

    1.配置

    #默认的配置文件
    [root@db01 redis]# pwd
    /usr/local/redis
    [root@db01 redis]# ll
    -rw-rw-r--  1 root root 46695 Jun 13  2018 redis.conf
    
    #创建reids配置文件目录(位置随意)
    [root@db01 redis]# mkdir /service/redis/6379 -p
    
    #编写配置文件
    [root@db01 redis]# vim /service/redis/6379/redis.conf
    #监听地址(注意顺序)
    bind 172.16.1.52 127.0.0.1
    #端口
    port 6379
    #后台启动
    daemonize yes
    #pid文件位置
    pidfile /service/redis/6379/redis_6379.pid
    #日志级别
    loglevel notice
    #指定日志文件
    logfile "/service/redis/6379/redis_6379.log"
    #密码
    requirepass 123
    #Redis持久化(不能配置较短的时间)
    save 900 1
    save 300 10
    save 60 10000
    
    
    [root@db02 redis]# grep -Ev '^#|^$' /usr/local/redis/redis.conf 
    

    2.指定配置文件启动

    #配置文件位置随意
    [root@db01 redis]# redis-server /service/redis/6379/redis.conf
    

    五、redis操作

    1.基本操作

    1.连接redis,默认进入'0'库
    	[root@db01 redis]# redis-cli 
        127.0.0.1:6379>
    2.查看所有数据,先查看数据量DBSIZE
    	127.0.0.1:6379> DBSIZE
        127.0.0.1:6379> keys *
    3.添加数据
        127.0.0.1:6379> set k1 v1
        OK
    4.查看数据
        127.0.0.1:6379> keys *
        1) "k1"
        127.0.0.1:6379> get k1
        "v1"
    5.删除数据(通过删除key,删除名值对)
        127.0.0.1:6379> keys *
        1) "k1"
        127.0.0.1:6379> DEL k1
        (integer) 1
        127.0.0.1:6379> keys *
        (empty list or set)
    6.修改数据
    	127.0.0.1:6379> set k1 v1
        OK
        127.0.0.1:6379> set k1 v11111
        OK
        127.0.0.1:6379> get k1
        "v11111"
    7.追加数据(合并)
    	127.0.0.1:6379> APPEND k1 000000
        (integer) 12
        127.0.0.1:6379> get k1
        "v11111000000"
    8.切换库,Redis数据库默认有16个库(0..15)
        127.0.0.1:6379> SELECT 1
        OK
        127.0.0.1:6379[1]> SELECT 2
        OK
        127.0.0.1:6379[2]> SELECT 3
        OK
        127.0.0.1:6379> SELECT 16
        (error) ERR invalid DB index		(错误)ERR无效的数据库索引
    

    2.密码的设置

    1.配置文件配置密码,重启Redis
        [root@db01 redis]# vim redis.conf 
        requirepass 123
    2.使用密码连接,为了安全可以创建多级目录来保存Redis密码
    	[root@db01 redis]# redis-cli -a 123
    3.或者登陆后输入密码
    	[root@db01 redis]# redis-cli
        127.0.0.1:6379> AUTH 123
        OK
        #查看key数量
        127.0.0.1:6379> DBSIZE
        (integer) 2018041
    4.redis连接后获取'配置文件'中密码
        127.0.0.1:6379> CONFIG GET requirepass
        1) "requirepass"
        2) "123"
    5.redis连接后'临时修改'密码,无法保存,Redis重启后失效
        127.0.0.1:6379> CONFIG set requirepass 234
        OK
        [root@db01 redis]# redis-cli
    	127.0.0.1:6379> DBSIZE
        (error) NOAUTH Authentication required.		#输入密码后才能查看
        127.0.0.1:6379> auth 123
        (error) ERR invalid password
        127.0.0.1:6379> auth 234
        OK
    

    3.通用操纵

    1.判断key是否存在
        127.0.0.1:6379> EXISTS k1
        (integer) 1						#存在则返回1
        127.0.0.1:6379> EXISTS k22
        (integer) 0						#不存在则返回0
        #命令行判断可以是否存在(脚本使用)
        [root@db02 redis]# redis-cli -a 1 exists k1
    	(integer) 1
    
    2.修改key的名字,rename
    	127.0.0.1:6379> KEYS *
        1) "k1"
        127.0.0.1:6379> RENAME k1 k100
        OK
        127.0.0.1:6379> KEYS *
        1) "k100"
    3.查看数据类型,type
    	127.0.0.1:6379> TYPE k100
        string		#字符类型
        
        
    4.设置生存时间,EXPIRE
    	#以秒为单位
    	127.0.0.1:6379> set qiudao 666
        127.0.0.1:6379> EXPIRE qiudao 10
        (integer) 1
        #以毫秒为单位
        127.0.0.1:6379> PEXPIRE k100 10000
    	(integer) 1
    5.查看生存时间,TTL
    	127.0.0.1:6379> TTL k100
        (integer) 10				#正整数生存时间倒计时
        127.0.0.1:6379> TTL k100
        (integer) -1				#-1代表没有设置生存时间
        127.0.0.1:6379> TTL k100
        (integer) -2				#代表设置过生存时间已删除,或者已过期
    6.取消生存时间,PERSIST
    	127.0.0.1:6379> TTL qiudao
        (integer) 93
        127.0.0.1:6379> PERSIST qiudao
        (integer) 1
        127.0.0.1:6379> TTL qiudao
        (integer) -1
        
        
    #命令行
    [root@db02 ~]# redis-cli -a 123 'bgsave'
    Background saving started
    
    

    六、持久化

    1.什么是持久化

    将内存中的数据写入到磁盘,永久保存
    

    2.持久化的模式

    1.RDB模式(#Redis默认模式)
    	一般用dump.rdp文件备份
    2.AOF模式
    

    3.RDB模式

    可以在'指定的时间间隔内'生成数据集的'时间点快照'(point-in-time snapshot)
    

    1)RDB工作模式

    1.默认情况下,Redis保存数据集快照到磁盘,名为dump.rdb的二进制文件。你可以设置让Redis在N秒内至少有M次数据集改动时保存数据集,或者你也可以'手动调用SAVE或者BGSAVE命令。'
    save	:阻止IO的写入
    bgsave	:不会阻止IO的写入
    
    2.在上文中我们已经在配置文件中做过对应的配置:
    例如,这个配置会让Redis在'每个60秒内超过1000次键改动时'自动转储数据集到磁盘:
    save 60 1000
    
    3.当 Redis 需要保存 dump.rdb 文件时,服务器执行以下操作: #Redis文件保存原理
    Redis 调用 fork() ,同时拥有父进程和子进程。
    子进程将数据集写入到一个临时的 RDB 文件中。当子进程完成对新 RDB 文件的写入时, Redis 用新RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
    
    4.这种方式使得 Redis 可以从写时复制机制中获益。(类似于不停机更新)
    

    2)配置RDB持久化

    #编辑配置文件
    [root@db01 ~]# vim /service/redis/6379/redis.conf 
    #监听地址
    bind 172.16.1.51 127.0.0.1
    #启动端口
    port 6379
    #Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
    daemonize yes
    #pid文件路径
    pidfile /service/redis/6379/redis_6379.pid
    #日志级别(debug verbose notice warning)
    loglevel notice
    logfile /service/redis/6379/redis_6379.log
    #设置redis密码
    requirepass 123
    #持久化数据文件存储位置
    dir /etc/redis/6379
    #rdb持久化数据文件名
    dbfilename dump.rdb
    #900秒(15分钟)内有1个更改,符合条件则帮助用户自动bgsave,关闭Redis自动持久化
    save 900 1
    #300秒(5分钟)内有10个更改
    save 300 10
    #60秒(1分钟)内有10000个更改
    save 60 10000
    
    [root@db04 src]# redis-server /service/redis/6379/redis.conf
    [root@db04 src]# vim /service/redis/6379/redis_6379.log
    [root@db04 src]# mkdir /etc/redis/6379 -p
    

    3)使用RDB文件

    1.先停止redis
    2.将rdb文件放到指定目录下(dbfilename指定的)
    3.启动redis,读取指定的rdb文件
    
    [root@db02 ~]# ls /usr/local/redis/dump.rdb
    
    #Redis在哪个目录下启动,就会读取哪个目录下的rdb文件(前提是没有配置dir /etc/redis/6379)
    #Redis关闭进程的时候才会在指定的路径生成dump.rdb文件,'小心'覆盖掉该目录下已经存在的dump.rdb文件
    

    报错

    1.redis无法启动,查看日志
    [root@db04 src]# tailf /service/redis/6379/redis_6379.log
    

    总结

    1.Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享
    
    2.redis基于单级才有数据库的概念,如果是集群的话,Redis将没有数据库的概念
    
    3.Redis是一个字典结构的存储服务器,可以将每个字典都理解成一个独立的数据库。
    
    4.每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),
    可以通过配置databases来修改这一数字。
    客户端与Redis建立连接后会自动选择0号数据库,
    不过可以随时使用SELECT命令更换数据库
    
    5.Redis存储服务器与数据库的区别
    Redis不支持'自定义'数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。
    另外Redis也不支持为每个数据库设置不同的'访问密码',所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。
    最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。
    
    5.redis特点
    数据库更像是一种命名空间,而'不适宜存储不同应用程序的数据'。比如可以使用0号数据库存储某个应用'生产环境中的数据',使用1号数据库存储'测试环境中的数据',
    但不适宜使用0号数据库存储'A应用'的数据而使用1号数据库'B应用'的数据,
    不同的应用应该使用不同的Redis实例存储数据。
    由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。
    
  • 相关阅读:
    atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    atitit。企业的价值观 员工第一 vs 客户第一.docx
    Atitit 实现java的linq 以及与stream api的比较
    Atitit dsl exer v3 qb3 新特性
    Atititi tesseract使用总结
    Atitit 修改密码的功能流程设计 attilax总结
    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13462205.html
Copyright © 2011-2022 走看看