php操作redis

1.文件说明

redis-cli.exe               # 客户端
redis-server.exe            # 服务器
redis.windows.conf          # 配置文件

2.什么是redis

redis是一款内存高速的缓存数据库

3.缓存

数据缓存(redis,memcache)	用于经常要变化的地方		如:商品的推荐
页面缓存(smarty)			用于不经常发生变化的地方	如:新闻消息页面

4.redis和memcache比较

(1)redis不仅仅支持简单的k/v类型的数据,同时还提供string,list,set,zset,hash等数据结构的存储
(2)redis支持master-slave(主一从)模型应用
(3)redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用,
	MemCached不支持数据持久化,断电或重启后数据消失
(4)redis单个value最大限制1GB,memcache只能保存1MB的数据
(5)如果redis只使用string类型,redis就可以被看作加上持久化特性的memcache
(6)memcache是多线程的(这是memcache优势之一),也就意味着阻塞情况少,而redis是单线程的,阻塞情况相对较多

5.redis里面只放mysql里使用频繁,用户操作量较大的数据,或者用户近期使用的数据

(1)读取数据的时候先从redis里面查,若没有,再去数据库查,同时写到redis里面,并且要设置失效时间。 
(2)存数据的时候要具体情况具体分析,可以选择同时插到数据库和redis(要是存放到redis中,最好设置失效时间)。

6.cmd操作redis

输入redis-cli
输入auth 密码

7.各种数据类型的解释

string
	字符串
	$a='123';
list
	列表
	$a=['1','2','3'];
set
	无序的集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
	$a=['1','2','3'];
zset
	有序的集合,且不允许重复的成员。
	$a=['1','2','3'];
hash
	适合用于存储对象
	$hash=[
			'a'=>'1',
			'b'=>'2',
			'c'=>'3',
		];

8.php对redis的基本操作

connect('127.0.0.1', 6379);
   	$redis->auth('密码');
   	//检查是否还再链接	   
	$redis->ping();
   	//写入,存在会被覆盖
   	$redis->set("key", "value");
   	//读取
   	$redis->get("key");
   	//删除
   	$redis->del('teacher_1');
   	//释放资源
   	$redis->close();
?>

9.对key的基本常用操作

//判断name是否存在,存在返回true
$redis->exists('name')
//匹配所有key,返回key名数组
$redis->keys('*')
//匹配a开头的key
$redis->keys('a*')
//同时删除多个key,返回变化的数据条数
$redis->del('name','age');
//改key名字,name改成name1
$redis->rename('name','name1')
//获取当前数据库key的数量
$redis->dbsize()
//获取key的剩余过期时间,单位秒
$redis->ttl('sex');
//设置key的过期时间,默认-1表示永不过期,-2表示已经过期,单位秒
$redis->expire('sex',10);
//选择数据库,默认第0个,默认共有16个数据库(0~15)
$redis->select(5);
//将key从当前数据库移动到指定数据库
$redis->move('age',1);
//删除当前数据库的所有key
$redis->flushdb();
//删除所有数据库的所有key
$redis->flushall();

10.对string数据的操作

创建
	//设置单个key
	$redis->set("key", "value");
		#第3个参数:
		#10 – 设置键key的过期时间,10秒
		#NX – 只有键key不存在的时候才会设置key的值
		#XX – 只有键key存在的时候才会设置key的值
	//一次性设置多个key
	$redis->mset([
		'name'=>'小明',
		'age'=>'13',
		'sex'=>'男'
	]);	
获取
	//一次性获取多个key,返回索引数组
	$redis->mget(['name','age','sex']);
	//获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始
	$redis->getrange('key',1,2)
追加
	//key已经存在,且值为字符串,会把 value 追加到原来值(value)的结尾。 如果 key 不存在,创建
	$redis->append('key','value');
//数字类型的key自减操作,key类型不是数字则报错 ,返回结果
$redis->decr('number');
//数字类型的key自加操作,与DECR相反
$redis->incr('number');
//数字类型key指定减少数值
$redis->decrby('number',10);//每次减10
//数字类型key指定增加数值,与DECRBY相反
$redis->incrby('number',10);
//获取key值的长度
$redis->strlen('key');

11.对list数据的操作

创建
	//从列表左边放入一个或者多个元素,不存在创建
	$redis->lpush('list','值1');
	//当列表存在时,从左边放入一个元素,不存在时报错
	$redis->lpushx('list','值2');
	//从列表右边放入一个或者多个元素,不存在创建
	$redis->rpush('list','值1');
	//当列表存在时,从右边放入一个元素,不存在时报错
	$redis->rpushx('list','值2');
获取
	//根据索引获取列表中的元素,列表索引最后一个可以使用-1
	(1)$redis->lrange('list',0,-1);
	(2)$redis->lgetrange('list',0,-1)
	//根据列表索引获取值
	(1)$redis->lindex('list',0);
	(2)$redis->lget('list',0);
修改	
	//根据索引设置列表中元素的值,当list不存在时报错
	$redis->lset('list',0,'新值');		
删除
	//从列表左边删除一个元素
	$redis->lpop('list');
	//从列表右边删除一个元素
	$redis->rpop('list');
	//从list列表里移除前 2(count)次出现的值为 value 的元素
	$redis->lremove('list','value',2);
		#count > 0: 从头往尾移除值为 value 的元素
		#count < 0: 从尾往头移除值为 value 的元素
		#count = 0: 移除所有值为 value 的元素
	//删除list列表右边的最后一个元素将其追加到list1列表,list1不存在会创建
	$redis->rpoplpush('list','list1');
	//根据索引start和stop保留列表元素,其他元素全删除
	$redis->ltrim('list',1,2);
//获取列表长度
$redis->llen('list');

12.对hash数据的操作

创建
	//单个设置hash内容,字段已存在会覆盖
	$redis->hset('hash','a','value');
	//只有当字段不存在时候才设置hash表中字段值
	$redis->hsetnx('hash','a','value');
	//批量设置hash内容
	$redis->hmset('hash',[
							'a'=>12,
							'b'=>2,
							'c'=>3
						]);
获取
	//获取hash指定字段的值
	$redis->hget('hash','a');
	//批量获取
	$redis->hmget('hash',['a','b','c']);
	//获取全部
	$redis->hgetall('hash');
	//获取hash表中所有字段的值
	$redis->hvals('hash');
	//获取hash表中所有的字段
	$redis->hkeys('hash');
删除
	$redis->hdel('hash','a');
//判断hash指定字段的值是否存在
$redis->hexists('hash','a');
//获取hash表中字段个数
$redis->hlen('hash');

13.对set数据的操作

创建
	//添加一个或多个元素到集合中
	$redis->sadd('set','a','b');
获取
	//返回集合中所有的元素
	$redis->smembers('set');
	//获取两个或两个以上集合的交集
	$redis->sinter('set','set1','set2');
	//获取两个或两个以上集合的并集
	$redis->sunion('set','set1','set2');
	//获取两个或者两个以上集合的差集
	$redis->sdiff('set','set1','set2');
删除
	//删除一个或多个集合中的元素
	$redis->srem('set','a','b');
	// 随机移除一个元素,并返回移除的元素
	$redis->spop('set');
	//将set的一个元素(a)移动到set1集合中去
	$redis->smove('set','set1','a');
//判断元素是否是在指定集合中
$redis->sismember('set','a');

14.对zset数据的操作

创建
	//元素已存在,会更新排序值(score)
	var_dump($redis->zadd('zset',10,'a'));
获取	
	//根据开始结束索引获取集合中的元素,-1表示最后一个,排序值越大的越靠后,如果相等,则后添加的靠后
	$redis->zrange('zset',0,-1);
	//反转排序,与zrange效果相反
	$redis->zrevrange('zset',0,-1);
	//获取指定元素(a)的索引(下标)
	$redis->zrank('zset','a');
	//获取指定元素(a)的排序值
	$redis->zscore('zset','a');
	//获取有序集合中元素个数
	$redis->zcard('zset');
	//获取指定范围的元素个数
	$redis->zcount('zset',min,max);
删除
	//删除有序集合中一个或多个元素,删除ab元素
	$redis->zrem('zset','a','b');
修改
	//为有序集的元素(a)的排序值增加2
	$redis->zincrby('zset',2,'a');

15.持久化

(1)快照
	特点:
		快照是一次全量备份,快照是内存数据的二进制序列化形式,在存储上非常紧凑
	持久化默认开启,配置文件redis.windows.conf
		//指定生成的文件名
		dbfilename dump.rdb
		//指定保存路径
		dir ./
		备份频率
		save 900 1             	#900 秒内如果超过 1 个 key 被修改,则发起快照保存
		save 300 10            	#300秒超过10个key被修改,发起快照
		save 60 10000           #60秒超过10000个key被修改,发起快照
	如果发现dump.rdb文件缺少了最近的记录,那么在这补充一种手动持久化方式,可以立即看到效果,执行此命令
		#./redis-cli bgsave          #异步保存
 	一些其他的手动命令
		#./redis-cli shutdown    	#同步保存到服务器并关闭redis服务器
		#./redis-cli lastsave    	#返回上次成功保存到磁盘的unix时间戳
		#./redis-cli bgrewriteaof  	#当日志文件过长时优化AOF日志文件存储
(2)AOF日志
	特点:
		AOF日志是连续的增量备份,AOF日志记录的是内存数据修改的指令记录文本。
		AOF日志在长期的运行过程中会 变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会无比漫长。
		所以需要定期进行 AOF重写,给 AOF日志进行瘦身。
	本质:
		把用户执行的每个指令备份到文件中,还原数据时,就是执行具体指令的过程
	开启AOF持久化(会清空redis内部的数据,最好在redis使用之前就开启它)
		修改redis.windows.conf配置文件
			appendonly yes					#改为yes
			appendfilename "appendonly.aof"	#保存的文件名
		修改完成配置之后重启redis(linux中)
			#kill -9 65261
			#ps -A | grep redis
		在redis.conf中,可以调整AOF备份形式:
			appendfsync everysec
				参数解释:
					always          一写指令就备份一次。这样做虽然安全,但是系统性能会降低。不推荐使用
					everysec        每一秒中备份一次。不管一秒钟变化了多少key,只备份一次,性能得到一定的保护。推荐使用。
					no            	会查看当前服务器状态,如果状态良好,就进行备份(随机)。这种备份方式数据是没有保证的。
					注:对比下来,性能:alwayseverysec>no。

16.主从模式

作用:
	为了降低每个redis服务器的负载,可以设置几个,并做主从模式
	一个服务器负载“写”数据(主服务器),其他服务器负载“读”数据(从服务器)
	主服务器数据会自动同步数据给从服务器
连接
	修改redis.windows.conf配置文件
		slaveof 主服务器ip 端口号	#成为谁的从服务器
		slave-read-only yes		#是否只读,默认只读	

如果您觉得本篇内容不错,可以点个关注,给个赞

你可能感兴趣的:(php学习笔记)