Redis

作者: 空留灯半盏 | 来源:发表于2018-07-04 21:31 被阅读0次

    Redis

    什么是Redis?

    就是一个数据库,但是数据存在内存中

    Redis的优势

    • 性能极高:读写11万次/s ,写8.1万次/s左右
    • 支持数据持续化 (服务器重启后数据不会丢失)
    • 支持丰富的数据结构: string, hash, list,set, sorted set

    Redis和memcache的区别

    • 相同点 : 都是基于内存以键值对形式存储
    • 不同点 : 支持数据持久化
    • 不同点 : Redis数据类型比memcache多

    Redis的安装

    官方下载地址 : http://redis.io/download

    一 :
        下载并上传到服务器
    二 :
        通过连接工具(例 : putty) 进入上传到的目录(/php/tools)
    三 :
        解压源代码包 tar -zxvf redis-4.0.9.tar.gz
    四 :
        进入解压目录 cd  /php/tools/redis-4.0.9
    五 :
        将源代码文件编译成可执行文件 make
    

    安装

    #创建redis目录
        mkdir -p /php/server/redis                       
    #复制配置文件
        \cp -rf  /php/tools/redis-4.0.9/redis.conf /php/server/redis   
    #复制redis客户端
        \cp -rf  /php/tools/redis-4.0.9/src/redis-cli /php/server/redis 
    #复制redis服务端 
       \cp -rf  /php/tools/redis-4.0.9/src/redis-server /php/server/redis 
    

    启动redis

    #进入安装目录
        cd /php/server/redis
    #打开配置文件
        vi ./redis.conf      
    #修改配置文件
        daemonize = no /改为 yes  (#改为后台启动
    #修改配置后启动服务
        ./redis-server ./redis.conf
    

    验证登录

    ./redis-cli -h 127.0.0.1 -p 6379   #可缩写 ./redis-cli
    

    常见的五种数据类型

    • 字符串 ( String
    • 哈希 ( hash
    • 字符串列表 ( list
    • 字符串集合 ( set
    • 有序字符串集合 ( sorted set

    字符串类型

    设置 一个 或 N个键 (set / mset)
    语法 : set 键 值 / mset 键1 值1 ... 键n 值n
        set php1 1/ mset php2 2 php3 3 .....
    键存在则修改,不存在则创建
    
    获取一个 或 N个键 (get /mget)
    语法 : get 键 / mget 键1 键2 .... 键N
        get php1 / mget php2 php3 php4 ....
    键存在则返回值 , 不存在则返回nil(无值)
    
    递增递减( incr 和decr )
    语法 : incr/decr 数字
    incr 键 /decr 键
    返回递增/递减后的数字
    键不存在则创建并递增1 / 递减为0
    
    增减指定值 ( incrby 和 decrby )
    语法 : incrby /decrby 键 数字
    incrby / decrby php1 2
    返回递增递减后的值
    键不存在则创建并递增值 / 递减为0
    
    字符串追加(append)
    语法 : append 键 值
    append php1 55
    返回 : 追加后的长度
    
    字符串截取(substr)
    语法 : substr 键 起始位置 结束位置
    substr php1 0 -1  (-1 代表最后一位) 
    下标从0开始 -1代表最后一位 -2代表最后2位 ...
    

    哈希 (Hash)类型

    可以用来存储复杂的数据结果,如存储人信息...商品信息..

    hash.png
    设置/获取hash字段
    语法 : hset/hmset 键 字段1 值1 字段2 值2... 
     hset php1 name 张三 /hmset php1 name 张三 age 18 add 上海 sex
    语法 : hget/hmget 键 字段1 字段2...   
    hget php1 name /hmget php1 name age add ...
    
    字段增值(hincrby)
    语法 : hincrby 键 字段 数字
    hincrby php1 age 2
    返回增值后的数值
    
    检测键字段(hexists)
    语法 : hexists 键 字段
    hexists php1 name
    存在返回1 不存在返回0
    
    删除键字段(hdel)
    语法 : hdel 键 字段1  ... 字段N
    hdel php1 name ...
    删除成功返回1  无值或者删除失败返回0
    
    字段个数 (hlen)
    语法 : hlen 键
    hlen php1
    返回字段个数
    
    查询键 哈希查询
    hkeys key    #返回全字段
    hvals key    #返回全值
    hgetall key  #返回全字段和值
    hkeys php1
    hvals php1
    hgetall php1
    

    列表类型 (list)

    概念 : 先进后出 先进先出

    先进后出  lpush lpop
    先进先出  lpush rpop
    
    左进(lpush) 和 右进(rpush)
    语法 : lpush 键 数据
    说明 : 从左/右压入数据,返回压入后数据长度
    lpush php1 1;lpush php1 3;lpush php1 2; #3
    rpush php2 1;rpush php2 3;rpush php2 2; #3
    
    查询(lrange)
    语法 : lrange 键 起始位置 结束位置
     lrange php1 0 -1 //321  #根据上面数据 
     lrange php2 0 -1 //132  #根据上面数据 
    
    头出和尾出(lpop/rpop)
    lpop/rpop 键
    返回弹出后的数据  lpop php1 //3
    

    集合(set)类型

    差集 : 我有你没有
    并集 : 合并去重
    交集 : 大家共有的
    
    添加(sadd)
    sadd 集合名 数据
    sadd s1 1;sadd s1 2;sadd s1 3;
    给指定的集合添加数据
    
    查看(smembers key)
    语法 : smembers 集合名
    smembers s1 //123
    
    移除(srem)
    语法 : srem 集合名 "数据"
    srem s1 "2"
    成功返回1
    
    差集(sdiff)
    语法 : sdiff 集合名1 集合名2 .. 集合名n
    作用查询 集合名1有其他没有的
    sdiff s1 s2 s3..
    返回其他没有的值
    
    并集(sunion)
    语法 : sunion 集合1 .. 集合n
    作用 : 合并去重
    sunion s1 s2
    返回 s1 s2 所有的并去除重复的
    
    交集(sinter)
    语法 : sinter 集合1 .. 集合n
    作用:取集合公共部分
    sinter s1 s2 
    返回s1和s2共有的值
    
    有序集合(Sorted set) 类型

    添加( zadd )

    语法 : zadd 集合名 数据 成员
    给指定集合添加数据
    zadd user1 1 php;zadd user1 2 java;zadd user1 3 ccc;
    

    查看 (zrange)

    语法 : zrange 集合名 起始位置 结束位置 [WITHSCORES]
    zrange user1 0 -1 [WITHSCORES]
    作用 : 获取集合中的成员 WITHSCORES:既显示成员又显示数据
    

    移除(arem)

    语法 : zrem 集合名 成员
    从指定集合移除数据
    zrem user1 ccc
    成功返回1
    

    升降序排名 (zrange & zrevrange)

    语法 : zrange 键 起始位置 结束位置 [WITHSCORES]
    语法 : zrevrange 键 起始位置 结束位置 [WITHSCORES]
    

    键操作(Key)

    键是否存在(exists)
    语法 : exists 键
    键存在返回1 不存在返回0
    
    键类型(type)
    type 键
    查看键类型
    
    键查询(keys *)
       keys  *         查看当前数据库所有键
       keys  php*      查看当前数据库以php开头的所有键
       keys  *php      查看当前数据库以php结尾的所有键
       keys  *php*     查看当前数据库包含php的所有键
    
    键更名(rename)
    rename 旧键名 新建名
    
    键统计(dbsize)
    语法 : dbsize 
    返回键个数
    
    设置键过期时间(expire / ttl)
    语法 : expire 键 秒数
    设置指定键过期时间 
    语法 : ttl 键
    检测键是否过期 #过期就不存在 返回-2 未设置返回-1 
    expire php8 10 #10秒后过期(销毁)
    ttl php8 检测php8键是否过期
    
    选择数据库(select)
    语法 : select 下标 #默认有16个数据库 0-15 可以通过修改配置来更改
    vi ./redis.conf   当datavases 16 改为想要的数据库个数
    
    键删除
    键删除-当前库 : flushdb
    键删除-所有库 : flushall
    

    小结:

    ###字符串(string)
    设置1个键: set 键  值
    设置n个键:mset 键1 值1 .. 键n 值n
    获取1个键: get 键  
    获取n个键:mget 键1 键n
    递增递减: incr/decr 键
    增减指定: incrby/decrby 键 数字
    追加:     append 键 内容
    截取:    substr 键 起始位置 结束位置(注:下标从0开始,含前含后)
    
    ###哈希(Hash)
    设置1个值: hset 键 字段  值
    获取1个值: hget 键 字段  
    设置n个值:hmset 键 字段1 值1 ... 字段n 值n
    获取n个值:hmget 键 字段1 ... 字段n
    检测字段: hexists 键 字段
    删除字段: hdel  键 字段
    字段个数: hlen  键
    所有字段: hkeys 键
    所有值:   hvals 键
    所有字段值:hgetall 键
    
    ###列表(List)
    压入:lpush/rpush 键 值
    弹出:lpop/rpop  键
    查询:lrange 键 起始位置 结束位置
    
    ###集合(Set)
    添加:sadd 集合名 数据
    删除:srem 集合名 数据
    查看:smembers 集合名
    差集:sdiff 集合名1 ... 集合名n    我有你没有
    交集:sinter 集合名1 ... 集合名n   大家都有的
    并集:sunion 集合名1 ... 集合名n   合并去重
    
    ###有序集合(Sorted Set)
    添加:zadd 集合名 数据 成员
    删除:zrem 集合名 成员
    查看: zrange 集合名 起始位置 结束位置 [withscores]     (升序)
    查看: zrevrange 集合名 起始位置 结束位置 [withscores]  (降序)
    
    ###键(Key)
    键是否存在:exists 键
    键类型: type 键
    键查询: keys *
    键更名: rename 旧键 新键
    键统计: dbsize
    键设置过期:expire 键  秒数
    查看过期: ttl 键 (明确:过期则代表不存在,不存在-2,未设置-1)
    选择数据库:select 下标(注:通过redis.conf声明数据库个数)
    删除当前库:flushdb
    删除所有库:flushall 
    

    Redis的持久化方式

    原理:
    redis持久化原理.png
    快照持久化(Snapshotting)
    快照模式将内存中的数据以快照的方式写入二进制文件中(dump.rdb)
    
    快照持久化-1.png
    快照存储文件名称
    
    快照持久化-2.png
    save 900 1     #900 秒内如果超过 1 个 key 被修改,则发起快照保存
    save 300 10    #300秒超过10个key被修改,发起快照
    save 60 10000  #60秒超过10000个key被修改,发起快照
    
    AOF持久化(Append only file)

    概念 : AOF方式只保存我们的写,修改,删除动作到文件中(appendonly.aof)当系统重启的时候会将该文件中的数据重新加载到内存中

    开启AOF方式

    关闭快照备份 参考上面开启快照方式将其注释#

    打开配置文件 vi ./redis.conf 开启AOF备份
    
    AOF备份.png
    重启服务 (1- 杀死进程 2-重启服务)
    killall redis-server
    ./redis-server ./redis.conf
    

    安全性

    问题 : 默认安装好redis匿名账号登录危险

    解决: 打开redis.conf 将requirepass 注释强调,设置密码即可

    redis安全性.png
    重启服务 ...
    开启密码后 需要密码才能登录   登录时添加-a输入密码
    或进入后auth 密码..
    

    主从复制

    概念 :
    主从复制 : 当主服务器有写入/删除/修改数据动作,从服务器会自动同步
    
    主从复制.png
    配置

    主服务器设置

    步骤1:打开配置文件,命令:vi /php/server/redis/redis.conf
    步骤2:开启后台启动,操作:daemonize yes
    步骤3:设置密码,操作:requirepass 123   #从服务器连接主服务器需要使用
    步骤4:开启Redis远程访问,操作:去掉bind 127.0.0.1可以使所有的ip访问redis
    步骤5:重启redis服务器
    步骤6:关闭防火墙,因为后期从服务器需要请求主,命令:service iptables stop
    

    从服务器设置

    步骤1:打开配置文件,命令:vi /php/server/redis/redis.conf
    步骤2:开启后台启动,操作:daemonize yes
    步骤3:修改端口,操作:port 6380   
    步骤4:声明需要复制的主服务器IP、端口、密码
    步骤5:重启redis服务器
    
    注 : 从服务器端口和主服务器端口不能一致
    主服务器必须关闭防火墙,命令:service iptables stop
    

    相关文章

      网友评论

          本文标题:Redis

          本文链接:https://www.haomeiwen.com/subject/zdbyuftx.html