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