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的值 nlistrlen 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和valuehlen key :返回key元素数量hexists key field :判断key有没有filed字段hincrby/hdecrby key field step :自增自减hkeys key :返回所有key的filedhvals 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 元素 :返回给定元素对应的scorezincryby key score 元素 :指定成员增量zcount :分值统计个数:zcountz(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、phpinfophp常见code:new Redis()->connect(ip)、->auth(密码)set、hmset、lpush、incr、setTimeoutget、hmget、hgetall、lrange、无法添加:查看是否是防火墙造成的。tp5使用redis:/application/config、cache、6379Cache::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 降序
php软件开发--redis操作相关推荐
- SylixOS软件开发-基础操作
学习sylixos SylixOS开发环境获取 代码结构 第一个APP 移植开源软件libcurl 下载libcurl的源码 预处理 新建移植工程 修改配置文件 编译 链接库 curl参考代码 核心文 ...
- 论软件开发之后的发展趋向
随着社会的进步和科技的发展,计算机越来越广泛的应用于社会的各方面.人们对计算机应用的需求越来越大,质量要求越来越高,这推动了计算机应用往大型化.复杂化发展.计算机应用的大型化.复杂化,对应的计算机软件 ...
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- 华睿相机sdk 开发_索尼发布相机远程操作SDK(软件开发工具包)
索尼从2020年12月9日开始,向开发者免费提供针对索尼数码相机的软件开发工具包" Camera Remote SDK" 1.03版. " Camera Remote S ...
- C++软件开发中“时间”相关操作全攻略
1. 时间概念 在日常生活中我们遇到的和时间相关的概念有北京时间.时差.12小时制.24小时制等,在软件开发中我们也经常遇到和时间相关的概念,软件虽说是一个虚拟的事物,但它仍然是来源于生活,不会脱离 ...
- 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类
1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...
- 揭秘软件开发的达摩克利斯之剑
↑ ???? 万字长文不想看,那就听一听叭 ↑ 为什么你的程序总是出现 bug? 凭什么让改 bug 占据了你大部分的时间? 看完本文,保证你能设计出更稳定的程序,摆脱 bug 的缠绕,做项目更安心! ...
- 物联网大数据平台软件开发架构案例解析
物联网大数据平台软件开发架构案例解析 有人说物联网是引领信息技术的第三次浪潮. 第一次浪潮是个人电脑的出现,开创了信息时代的第一次革命,此次浪潮成就了微软.IBM等巨头. 第二次浪潮是以信息传输为特征 ...
- 软件开发整理的一些工具
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...
最新文章
- 初试linux编译(ubuntu+vim)+玩转智能蛇
- 人工智能会被赋予人性么?
- WRF用户手册翻译:Chapter 5: WRF Model
- 淘淘商城 @Autowired 装配失败
- 网络知识:路由器不关闭这个功能,视频越刷越卡!
- hdu 5802——Windows 10
- 日志打印的8种级别(很详细)
- python测量血压_python距离测量的方法
- mysql中使用正则表达式,mysql中使用正则表达式查询
- PHP SEVER预定义变量
- 翻译练习:计算机网络
- 人类一败涂地电脑版_【天翼云盘】侠盗猎车手5(GTA5) 终极SVIP整合版,话不多说来波狠的!...
- EXT Column Tree 的应用
- Stack Overflow首席大神,他回答了超过3万个问题
- 前端那些事之时间轴篇
- java mail报权限问题
- c语言编程的头文件是什么,C语言头文件到底是什么?
- 基于xxtea算法文件加密工具
- VMware下ubuntu与windows主机共享文件夹
- PHPUnit 入门