zoukankan      html  css  js  c++  java
  • linux系统redis简介

    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)
    3.消息队列(kafka)
    

    3.为什么要用Redis

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

    4.redis优点

    1.高速读写
    	将所有数据存储在内存,单线程服务,使用C语言
    2.部署简单,使用稳定
    3.数据类型丰富
        String: 字符串类型
        Hash: 哈希类型
        List: 列表类型
        Set: 集合类型
        Sorted set: 顺序集合类型
    4.支持持久化
    	将内存的数据写入磁盘
    5.多种内存分配及回收策略
    6.支持事物、锁
    7.消息队列、消息订阅
    8.支持高可用
    	哨兵模式
    9.支持分布式分片集群
    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:单核缓存服务,在单节点情况下,更加适合少量用户,多次访问的应用场景。
    

    二、Redis使用场景

    1.缓存
    	放在数据库前面
    2.会话保持
    	登录cookie、session
    	折扣券,代金券
    3.排行榜
    4.计数器
    	论坛帖子点赞点踩
    5.社交软件
    	QQ共同好友,微博共同爱好
    6.消息队列
    	结合ELK做日志收集
    

    三、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
    

    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
    

    6.连接redis

    #配置环境变量
    [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.51 127.0.0.1							#监听地址
    port 6379										   #端口
    daemonize yes									   #后台启动
    pidfile /service/redis/6379/redis_6379.pid		 	  #指定pid文件
    loglevel notice										#指定日志级别
    logfile /service/redis/6379/redis_6379.log			  #指定日志文件
    

    2.指定配置文件启动

    [root@db01 redis]# redis-server /service/redis/6379/redis.conf
    

    五、redis操作

    1.基本操作

    1.连接redis
    	[root@db01 redis]# redis-cli 
        127.0.0.1:6379>
    2.查看所有数据
        127.0.0.1:6379> keys *
        (empty list or set)
    	#查看时注意不要轻易使用,如想查看数据,先查看数据量DBSIZE
    	127.0.0.1:6379> DBSIZE
    	(integer) 2018041
    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.删除数据
        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.切换库
        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
    

    2.密码的设置

    1.配置文件配置密码
        [root@db01 redis]# vim redis.conf 
        requirepass 123
    2.使用密码连接
    	[root@db01 redis]# redis-cli -a 123
    3.登陆后输入密码
    	[root@db01 redis]# redis-cli
        127.0.0.1:6379> AUTH 123
        OK
        127.0.0.1:6379> DBSIZE
        (integer) 2018041
    4.redis连接后获取密码
        127.0.0.1:6379> CONFIG GET requirepass
        1) "requirepass"
        2) "123"
    5.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 k2
        (integer) 0						#不存在则返回0
    2.修改key的名字
    	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.查看数据类型
    	127.0.0.1:6379> TYPE k100
        string
    4.设置生存时间
    	#以秒为单位
        127.0.0.1:6379> EXPIRE qiudao 10
        (integer) 1
        #以毫秒为单位
        127.0.0.1:6379> PEXPIRE k100 10000
    	(integer) 1
    5.查看生存时间
    	127.0.0.1:6379> TTL k100
        (integer) 1					#正整数生存时间倒计时
        127.0.0.1:6379> TTL k100
        (integer) -1				#-1代表没有设置生存时间
        127.0.0.1:6379> TTL k100
        (integer) -2				#代表设置过生存时间已删除,已过期
    6.取消生存时间
    	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
    

    六、持久化

    1.什么时持久化

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

    2.持久化的模式

    1.RDB模式
    2.AOF模式
    

    3.RDB模式

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

    1)RDB工作模式

    1.默认情况下,Redis保存数据集快照到磁盘,名为dump.rdb的二进制文件。你可以设置让Redis在N秒内至少有M次数据集改动时保存数据集,或者你也可以手动调用SAVE或者BGSAVE命令。
    
    2.在上文中我们已经在配置文件中做过对应的配置:
    例如,这个配置会让Redis在每个60秒内至少有1000次键改动时自动转储数据集到磁盘:
    save 60 1000
    
    3.当 Redis 需要保存 dump.rdb 文件时,服务器执行以下操作:
    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
    daemonize yes
    pidfile /service/redis/6379/redis_6379.pid
    loglevel notice
    logfile /service/redis/6379/redis_6379.log
    #设置redis密码
    requirepass 123
    #持久化数据文件存储位置
    dir /etc/redis/6379
    #rdb持久化数据文件名
    dbfilename dump.rdb
    #900秒(15分钟)内有1个更改
    save 900 1
    #300秒(5分钟)内有10个更改
    save 300 10
    #60秒(1分钟)内有10000个更改
    save 60 10000
    

    3)使用RDB文件

    1.先停止redis
    2.将rdb文件放到指定目录下
    3.启动redis
    
  • 相关阅读:
    NHbiernate 配置
    NHibernate开发入门
    Thread 线程简单例子
    C#中委托和事件
    DataGridView 去掉多余的列
    ASP.NET C# 有程序集加不了解决办法
    oracle“记录被另一个用户锁住”
    Android 控件属性
    Android 入门
    MVC 视频笔记
  • 原文地址:https://www.cnblogs.com/zabcd/p/13427652.html
Copyright © 2011-2022 走看看