php软件开发--redis操作

nosql及redis介绍

nosql介绍

nosql:
        非关系型数据库、key-value存储形式、不支持sql、没有表结构、读写性能高等...
        优点:高并发读写强、大数据量扩展、配置简单、成本低
        缺点:无统一标准、没有官方支持
        常见nosql:redis、MongoDB、tair、simpleDB...

redis介绍

redis介绍:
        远程数据服务、c编写、key-val数据模型、支持多种数据类型string、hash、list、set、zset、效率高存储内存、读写性能高...

优势:
        高性能缓存、多类型数据结构、redis分布式、高并发海量数据处理、数据持久化存储硬盘。
        与memcache比较数据类型(str、list、set、hash、zset、set)、持久化(文件)、海量数据(1GB)
        redis和memcache区别:持久化存储、五种数据类型(字符串、列表、集合、哈希、有序集合)、集群(主从集合)、6379 & 11211
        优势:单进程单线程、性能高、数据丰富、原子性(成功执行完全不执行)、事务(multi、exec)、api支持面向对象
        redis-server:服务端、redis-cli:客户端

安装:
        下载、解压、进入目录、编译、安装、复制配置文件
        daemonize=yse (后台运行)

启动:
        服务端:./redis-server ./redis.conf
        客户端:./redis-cli -h ip -p port (第三方图形化连接工具RDM、ip + port配置)
        检测:netstat -tunpl | grep 6379

关闭:         

        客户端:
                ./redis-cli shutdown、
        服务端:
                pkill redis-server                 
                killall redis-server                 
                pkill -9 redis
        配置文件(*.conf):
                端口(port)
                守护进程(daemonize yes)
                允许任意ip访问(bind 0.0.0.0)
                ip限制:bind 多个ip逗号分割
                密码:requirepass 密码 (命令:auth 密码)

终端命令&数据类型:

数据类型

数据类型:
        字符串、列表、集合、有序集合、哈希值
        string:字符串,基本类型(可存储任何类型、序列化对象、数组)1GB、持久化

常见命令

select  数据库编号               :默认有0-15号数据库,默认是0号数据库
dbsize                          :返回当前数据库里面键的个数
flushdb                         :清空当前数据库里面所有的键
flushall                        :清空所有数据库里面的所有的键    
key *                           :返回当前数据库里面的键
exists 键名..                   : 判断一个键是否存在。
del 键名称                       :删除指定的键
expire key 有效期(秒数)          :设置键的有效期
ttl 键名                        :返回一个键剩余的过期时间.
type key                        :返回数据类型
    

字符串string

string:字符串,基本类型(可存储任何类型、序列化对象、数组)1GB、持久化

	set key val ex nx	            :设置键 值 生存时间 不存在设置
	hmset key value [key value..]    :设置多个键值
	setex key seconds value	        :设置为字符串类型,并指定生存时间
	setnx key value		            :存在设置失败、不存在设置成功。
	get key			                :获取键值
	hmget key [key..]:	            :查询所有key的值 nli
	strlen key		                :返回key字符串长度
	getset key value		        :获取旧值设置新值
	incr key			            :加加操作
	incrby key val		            :加指定值
    incr、decr key step             :自增、自减(key不存在直接创建 步长允许负数)
    append key val                  :追加

哈希hash

hash:hash类型可以看成是具有key和value的容器(对象信息)

	hset 键名称 field value	            :设置键值
	hget 键名称 指定的field	            :获取键值
	hmset 键名称 field1 value1 …        :设置多个键值
	hmget 键名称 field1 field2…….       :获取多个键值
	hgetall 键名称		                :获取全部、获取指定哈希中所有的field和value
    hlen key                            :返回key元素数量
    hexists key field                   :判断key有没有filed字段
    hincrby/hdecrby key field step      :自增自减
    hkeys  key                          :返回所有key的filed
    hvals key                           :返回所有key的value

链表list

list:链表,字符串的双向链表,按照插入顺序排序。(队列,特点:数据 先进先出)
 
    lpush 键名称 元素 						:头部(左边)添加一个或多个元素 
    rpush 键名称 元素 						:尾部(右边)添加元素 
    lpop 链表名称 							:删除并返回头部的元素
    rpop 									:删除并返回尾部的元素
    llen 链表名称 							:返回列表的长度 
    lragne 键名称 start end(-1)			    :获取链表里面的元素 
    rpoplpush                               : 移除第一个添加第二个
    linsert kye before|after 链表元素 新元素 	:元素插入到链表中某个元素之前或之后 
    lset 链表名称 下标 新值 					:修改链表中指定下标的元素 
    lindex 链表名 下标 						:返回链表中指定下标的元素 
    lrem key count value 					:删除链表中的元素 
    ltrim 链表的名称 开始下标 结束下标 	:保留指定范围的元素 

集合set

set:集合,set是string类型的无序集合。
set元素最大可以包含(2的32次方-1)(整型最大值)个元素 添加、删除、并集、交集、差集操作 每个集合中的各个元素不能重复 

    sadd 键名 元素1 元素2 		:向集合中添加元素(一个或多个) 
    smembers 键名 				:获取集合中的元素 
    scard 集合名称 				:获取集合中元素的个数
    srem key val1               :删除key集合val1元素
    spop key                    :随机生成key集合一个元素
	sismember key val1          :判断key中val元素是否存在
	hmove                       :删除源集合添加目标集合
    sdiff 集合1 集合2 			:获取集合中的差集 
    sinter 集合1 集合2 			:获取交集 
    sunion 集合1 集合2 			:求并集 

有序集合 

有序集合:set的一个升级版本,他在set的基础上增加了一个顺序属性(权值) 

    zadd 集合名 序号 元素 							:有序集合中添加元素 
    zrem key val1                                   :删除
    zrange 集合名 开始下标 结束下标 -withscore 		:默认是升续排列 
    zremrangebyrank key 开始下标 结束下标 				:删除集合中排名在指定范围的元素 
    zcard key				    :返回有序集合中元素的个数 
    zscore key 元素 			:返回给定元素对应的score
    zincryby key score 元素     :指定成员增量
    zcount                      :分值统计个数:zcount
    z(rev)range key startIndex endIndex    :返回有序集合指定范围
    zremrangebycore             :分值删除

发布与订阅

        publish/subscribe 消息通信模式。
        发送者publish发布消息、订阅者接受消息
        publish 频道 发送消息
        subscribe 频道
        psubscribe 名称*

安装认证及持久化、php安装redis扩展

安装认证&持久化机制

安装认证
    vim打开redis的配置文件(redis.conf)

    #requirepass   设置的密码

    重启redis服务,让密码生效。 
        pkill redis-server && ./redis-server ./redis.conf

    客户端如果没有通过验证,则无法操作
    客户端登录到服务器:
        redis-cli –a 密码
        auth  密码

持久化机制
        内存中的数据以文件形式保存到硬盘、服务器重启自动读取内存 snapshotting(快照)、append-only file(缩写aof)
快照:(默认)save、dbfilename、dir
        默认、dump.rdb一次性把全部数据保存到硬盘
        触发时机: 每隔N分钟或N次操作,内存数据形成rdb文件。
        save 900 1 # 900秒 1个key修改 发起快照
        save 300 10 # 300秒 30个key修改,弄起快照 屏蔽触发条件即关闭快照。    
        保存位置、备份位置: dir ./、dbfilename dump.rdb

手动触发:
        登录:bgsave 未登录:./redis-cli bgsave -a 密码
        缺点: 有一定间隔时间操作、redis意外down容易丢失快照。
        其他配置项: dir ./ 目录 dbfilename dump.rdb rdb文件名
        Rdbchecksum yes 检验数据
        rdbcompression yes 完整性
        stop-writes-on-bgsave-error yes 备份出错、主进程不停继续写入

aof: append-only-file 追加方式持久化AOF(appendfsync always|everysec|no)全局记录 性能消耗大
        配置 appendonly yes # 开启
        appendfilename appendonly.aof # 文件名
        触发: appendfsync always # 每次收到写命令就立即强制写入磁盘
        appendfsync everysec # 每秒钟强制写入磁盘一次
        appendfsync no # /完全依赖 os,性能最好,持久化没保证 重写: 把内存中的数据,逆化成命令,写入到.aof日志
        auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
        auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写
        no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof 手动执行:
        登录:bgrewriteaof 未登录:./redis-cli -a 密码
        bgrewriteaof 其他问题说明: dump rdb过程中,aof如果停止同步,会不会丢失: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作
        aof重写是指什么: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里. 以解决 aof日志过大的问题.
        如果rdb文件,和aof文件都存在,优先用谁来恢复数据:
        aof 2种是否可以同时用:可以,而且推荐这么做 恢复时rdb和aof哪个恢复的快: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

php支持redis安装扩展

php支持redis安装扩展:
    下载扩展、添加ext目录、php.ini引入扩展、重启apache、phpinfo
    php常见code:
        new Redis()->connect(ip)、->auth(密码)
        set、hmset、lpush、incr、setTimeout
        get、hmget、hgetall、lrange、
        无法添加:查看是否是防火墙造成的。

    tp5使用redis:/application/config、cache、6379
        Cache::set、get、rm、inc\dec、pull、clear、remember

linux下安装php的redis扩展、外网连接redis、主从复制、redis事务、电商秒杀原理:

php安装redis扩展

linux下安装php的redis扩展
        下载、解压、进入目录、执行phpize(php7.0/bin/phpize)
         进行配置指定安装在哪个PHP中:
                ./configure --with-php-config=/usr/local/php7.0/bin/php-config
                编译安装 安装成功、提示扩展位置(redis.so) 修改php.ini添加扩展。
linux:
        yum
            yum serach redis|grep ^php
            yum install -y xxx
        源码安装:
            下载、解压、生成配置文件、php-devel、执行phpize、配置php扩展、编译安装、配置、重启

外网连接redis

        php -m
        phpinfo()
        外网php客户端连接redis bind 127.0.0.1改为 #bind 127.0.0.1
        protected-mode yes 改为 protected-mode no (禁止外网访问)

主从复制

        网站运行,mysql的写入((添加、修改、删除))、读取操作的sql语句比例:1:7
        mysql为了降低每个服务器负载,可以设置读写分类 主服务器数据会“自动”同步给从服务器
        Redis支持简单易用的主从复制(master-slave replication)功能,该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。

        主要作用: 主从备份,防止主服务器宕机;
        读写分离,分担主服务器的任务; 任务分离,从服务器分别担任备份工作和计算工作。         主:slaveof 主服务器ip 端口号
        从:slave-read-only yes 、replicaof ip 端口 设置连接主服务器口令 masterauth 密码 netstat -tunpl
        验证:info replication
        redis主从复制的缺陷: 同步的过程都要重新执行一遍,所以要记住如果是多台从服务器时,不要一下子都启动起来

redis事务

redis中事务 Redis支持简单的事务
Redis与 mysql事务的对比

mysql:
    start transaction sql语句
    rollback 回滚
    commit 提交

redis:
    multi 开启事务
    discard 回滚
    exec 提交 
    watch命令:监听
        watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到exec命令、unwatch(取消监听)

秒杀原理(redis队列)

        使用redis链表中队列,进行pop操作,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。

redis项目 

 后台:
        用户登录、登录成功发送邮件功能(异步发送)
        文章管理:列表、增加、修改、删除
            

前台:热门文章推荐 数据库redis
            用户登录与邮件发送:
                用户表:key设计 账号密码
                hash、user:username:admin、id、username、password、hgetall
                登录与任务队列: 登录接受消息处理、redis比较(账号、密码、发送任务发给队列、生产与消费跳转文章列表)
                邮件发送:phpmailer/phpmailer
            文章设计:
                zset、 hash、字段:id、string
                artile:key string:key
                artile:id:1 hash key
                article:zset:id zset 降序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值