Redis从入门到放弃

redis从入门到放弃

redis介绍

redis是一个开源的使用ANSI C语言编写的,支持网络,可基于内存亦可持久化的日志型的,key-value数据库,并提供多种语言的API.从2010年3月15日起,redis的开发工作由VMware主持,从2013年5月开始,redis 的开发由pivotal的赞助

redis与mencached都是为了应付网络上的高并发,大流量而存在.

redis与mencached可以同时接收到的并发请求,都已经过W,对服务器来说,他们两基本上不会成为瓶颈. 称为服务器瓶颈的最重要的是网络硬盘IO

redis是什么

redis是可以持久化的,memcached是不能持久化的
redis是支持多种数据类型的,memcached只支持字符串
redis读速度没有memcached快,写速度与memcached差不多
redis的value值最大为512M,而memcached是1M
redis是支持主从服务器的,memcached是不支持主从服务器.

redis在存储数据的时候,主要是把mysql里面的数据取出来,把它的中间结果集数据放到redis里,使得mysql的连接数减少

redis安装

  1. 下载安装包, 官网 www.redis.cn
  2. 解压
    tar -zxf redis-4.0.6.tar.gz
  3. 进入到解压目录
    cd redis-4.0.6
  4. 编译安装(需指定安装路径)
    make PREFIX=/安装路径 install
  5. 复制解压包里的redis.conf配置文件到redis的安装路径下的conf文件夹下,没有的话手动创建一个
  6. redis的服务启动文件为bin/redis-server,配置文件中默认配置服务启动是以前台程序运行,修改配置文件中的启动为后台运行
    vi conf/redis.conf
    默认配置中 域名绑定到了127.0.0.1 只能本机适用,端口号绑定到6379
  7. daemonize no配置是否后天运行 yes为后台运行
  8. requirepass xxxx配置密码,如果注释则不使用密码
  9. bind 127.0.0.1 启用则只能这个ip的访问,如果注释掉则所有ip都可以访问, 但是必须启用密码

  10. 使用配置文件启动redis服务redis-server conf/redis.conf

入门

启动客户端redis-cli
启动之后输入info可打印出redis的版本等信息

redis支持的数据类型

redis是一个开源的,内存中的数据结构存储系统,可用作数据库,缓存和消息中间件,它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 范围查询,bitmaps,hyperloglogs和地理空间(geospatial)**redis内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过redis哨兵(sentinel)自动分区(cluster)提供高可用性(high availability).

1. string(字符串)

  • set : 添加值,存在时修改,不存在时添加
  • get : 获取字符串
  • mset : 同时设置多个
  • mget : 同时获取多个
  • del : 删除,可以同时删除多个
  • incr : 增加数值1,
    redis是的最大值为2^64,最小值为2^64,是有符号的,如果超出最大值则会报错,memcached达到最大值后继续加会变为0
  • incrby : 增加指定的值
  • decr : 减1
  • decrby : 指定减少多少,
    incrby和decrby都可以使用负值;

2. hash(哈希表)

  • hset : 设置一个hash
    hset key field value
  • hget : 获取hash的值
  • hmset : 设置多个值
    hmset key field value field value field value ...
    字段不能重复 ,重复后就覆盖
  • hmget : 获取多个值
  • hgetall : 获取一个key里面的所有的值包括field和对应的value
  • hkeys : 获得一个key里面的字段(field)名
  • hlen : 获得长度
  • hdel : 删除字段
    hdel key field
  • del key 删除key

3. list(列表)

列表分为: 单向列表和双向列表:

  • lpush : 从左边插入值
  • lpop : 从左边弹出一个值
  • rpush : 从右边插入值
  • rpop : 从右边弹出值
  • lrange : 获得list中的值
    lrange key start end 如果要获取所有的可以使用 lrange key 0 -1, -1表示倒数第一个,-2 表示倒数第二个.
  • llen : 获得列表的长度

4. set(无序集合)

  • sadd : 添加值
  • smembers : 获得所有的成员值
  • spop 随机弹出一个值
    spop key [num] 后面不指定num时只随机弹出一个 ,指定num时随机弹出num
  • scard : 检查长度
  • sinter : 取两个key的交集
  • sdiff : 取两个key的差集
    * 差集以第一个key 的差为结果输出*
  • sunion : 并集

5. sortedset(有序集合)

  • zadd : 添加值
    zadd key int value [int value] ...
    * 集合会通过int这个整形数值进行排序*
  • zcard : 有序集合的长度
  • zrange : 获得有序集合里的值
    zrange key 0 -1 withscores 带有整形索引的查看
  • zrevrange : 倒序
  • zincrby : 增加指定的值

对key(键)

  • keys : 获取所有的keys
    keys *s 获取以s结尾的key
    keys s* 获取以s开头的key

  • redis-cli keys "*" 获取这个

  • redis-cli del 1 删除索引为1的key

对key的说明
redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如’foo’的简单字符串到一个JPEG文件的内容都可以,空字符串也是有效的key值
key 的原则:
- 太长的key值不是好主意,不仅消耗内存,而且在数据中查找这类键值的计算成本很高
- 太短的键值通常也不是好主意,影响阅读
- 最好坚持一种模式,例如: “object-type id field”

其他操作

  • exists : 判断是否存在
  • expire : 设置过期时间
    expire key second
  • ttl : 查看过期时间
    过期之后返回 -2
    永久存在是-1
  • type : 判断类型
  • select : 选择库
    redis默认是16个库,每个库都是独立的,默认是0号库
  • ping : 检查客户端与服务器之间连接是否正常
  • flushdb : 清空当前库
  • flushall : 清空所有的库
  • auth : 开启密码认证
    密码配置需要在redis.conf配置文件中配置requirepass xxxx,设置密码后需要用auth命令输入密码认证,

持久化功能

snap shotting 快照持久化

配置快照持久化
配置文件中:

save 900 1 #如果900s有至少一个keys改变,就持久化
save 300 10 #如果300s至少有10个keys改变,就要持久化 
save 60 10000 #如果60s至少有10000keys改变,就持久化

持久化是把内存里面的所有数据压缩一次,一次性把数据全部存储,每次持久化都需要对全部数据操作,所以需要合理配置存储的时间.

开启持久化功能需要配置一个数据持久化的文件,
配置文件中配置如下:
dir /xxx

append only file(AOF持久化,精细持久化)

  • 配置开启或者关闭AOF持久化:
    appendonly no 关闭AOF持久化
    appendonly yes打开AOF持久化
  • 配置持久化数据的文件名:
    appendfilename "appendonly.aof"
  • 配置持久化的保存方式
    appendfsync always 总是保存.有任何改变立即保存,
    appendfsync everysec 每秒保存一次,推荐这种
    appendfsync no 根据系统的io进行保存,随机保存,不推荐.

持久化保存说明:
1. AOF持久化保存的数据是执行的命令
2. 快照持久化保存的是二进制
3. 使用快照持久化的时候,在redis启动的时候会自动读取数据到内存,一次性就读取到位,所以非常快,
4. AOF持久化是redis启动的时候会一行一行执行命令,这个过程比较慢,
5. 快照持久化在持久的时候每一个都是覆盖的写,持久所需资源大
6. AOF持久的时候,是把执行命令记录下俩,再写到文件里

redis的主从模式

redis replication 的特点和优势

  1. 同一个Master可以同步多个Slaves .
  2. Slave同样可以接受其他Slaves的连接和同步请求, 这样可以有效的分载Master的同步压力.
  3. Master Server是以非阻塞的方式为Slaves提供服务. 所以在Master-Slaver同步期间, 客户端依然可以提交查询或者修改请求.
  4. Slave Server同样是以非阻塞的方式完成数据同步. 在同步期间, 如果有客户端提交查询请求,redis则返回同步之前的数据
  5. 为了分载master的读操作压力,Slave服务器可以为客户端提供只读操作的服务, 写服务仍然必须由Master来完成. 即便如此, 系统的伸缩性还是得到了很大的提高.
  6. Master可以将数据保存操作交给Slaves完成, 从而避免了在Master中要有独立的进程来完成此操作
  7. 主从模式的架构图如下:
    Alt text

redis replication 的工作原理

在Slave启动并连接到Master之后, 它将主动发送一个SYNC命令. 此后Master将启动后台存盘进程, 同时收集所有接收到的用于修改数据集的命令, 在后台进程执行完毕后, Master将传送整个数据库文件到Slave, 以完成一次完全同步. 而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中. 此后, Master继续将所有已经收集到的修改命令, 和新的修改命令依次传送给Slaves, Slave将在本次执行这些数据修改命令, 从而达到最终的数据同步.
如果Master和Slave之间的链接出现断链现象, Slave可以自动重连Master, 但是在连接成功之后, 一次完全同步将自动执行.

总结:
1. 从服务器连接上主服务器的时候, 主服务器会一次性把自己的所有的数据传给从服务器.
2. 之后主服务器有了新数据, 主服务器就会把新数据传给从服务器,这个时候就是增量同步.
3. 如果主从服务器之间断开, 那再一次连接的时候,主从服务器会使用* 全量同步*

配置replication

准备工作: 两台redis服务器, 或者同一台电脑上启动两个redis服务,但是要保证端口号, 配置文件, pid文件 数据文件 这四样不能一样.

  1. 创建一份新的配置文件:
    cp conf/redis.conf conf/slave.conf
  2. 创建新的数据目录:
    mkdir /slave-data
  3. 修改配置:
    打开从服务器的配置文件slave.conf
    vi conf/slave.conf
    修改端口号:
    port 6380
    修改pid配置存储位置
    pidfile /var/run/redis_6380.pid
    修改数据文件位置
    dir /working/redis-4.0.6/slave-data
  4. 启动redis服务器
    ./redis-4.0.6/bin/redis.server ../conf/slave.conf

  5. 两台服务器准备好, 接下来正式主从配置

    • 主服务器不需要任何配置
    • 从服务器打开配置文件
      vi redis-4.0.6/conf/slave-conf
    • 指定连接到主服务器的端口号与IP地址
      slaveof 127.0.0.1 6379
    • 如果主服务器设置了密码,则需要指定主服务器的登录密码
      masterauth xxxx
    • 保存退出并重启从服务器

这个时候主从模式就配置成功,可以测试了, 主服务器写入数据查看从服务器是否有同步

注意 :
- 从服务器是只读的, 不能写操作
- 主服务器 : 可读可写;

PHP操作redis

安装PHP的redis扩展


  1. 下载php-redis的php扩展程序包,

  • 查看PHP的版本号
    方法: 输出phpinfo(); 输出信息里找到PHP Extension Build
  • 解压
    tar -zxf redis-3.1.6.tgz
  • 进入到目录
    • [ ] 4. 执行PHP扩展的安装步骤

猜你喜欢

转载自blog.csdn.net/m0_37532027/article/details/79841191