作为一个业余的phper一直在避免接触redis,也没有系统的学习过redis,前几天又翻了翻网上关于redis的文章,看懂了一点点,做个笔记(只涉及到很基础的一部分,redis的作用与用途不是一两天能掌握的)。
一、redis的作用
搭配mysql做缓存,减轻数据库压力,提高系统响应速度;任务队列,按队列顺序依次完成任务(比如订单);做计数、排名、统计;redis主从中从服务器做持久化存储。
二、php中利用redis缓存数据库数据的方法
比如网上商城的宝贝展示,一般情况下所有人看到的宝贝列表都是一样的,如果使用php+mysql做的话,每次用户打开商城都会到数据库查询一遍。有了redis,就可以在用户登录商城的时候先看下redis里面有没有商品列表的数据,如果有就直接取redis即可,如果没有就查数据库并将结果存入redis中,这样下次就可以避免查库了(最好给该redis数据设置一个过期时间,防止有新商品上架了客户却看不到redis更新)。
如果redis数据来自数据库的话,代码中每次都需要判断redis有没有数据,如果没有才查库并存入redis,这种判断看起来增加了cpu的计算量,其实基本可以忽略不记!比起数据库的连接、查询开销节省的不是一点点性能。
<?phpif (redis 存在商品列表)获得redis商品列表数据else查询sql获得商品列表数据获得sql商品列表数据将商品列表数据存入redis
三、php操作redis
Redis在PHP项目中的应用(sql操作结合redis、mysql)
php使用redis的几种常见方式和用法(缓存、队列、锁、发布订阅)
<?php//创建一个redis客户端$redis = new Redis();//连接redis服务,指定主机,端口,和超时时间$redis->connect('127.0.0.1', 6379, 60);//进行密码验证$redis->auth('');//设置键的值,成功返回true,失败返回false$ret = $redis->set('app_id', '1234567890');var_dump($ret);//获取键的值,成功返回键值,失败返回false$ret = $redis->get('app_id');var_dump($ret);//设置新值,返回旧值,如果key不存在,则设置值,返回false$ret = $redis->getSet('app_id', '666666666');//一次设置多个键值对$ret = $redis->mset(['db_name' => 'test', 'db_host' => 'localhost']);var_dump($ret);//一次获取多个键值对,返回一个数组$ret = $redis->mget(['db_name', 'db_host']);var_dump($ret);//设置键值,和过期时间,单位:秒,成功返回true$ret = $redis->setex('name', 10, 'hello');var_dump($ret);//设置键值,过期时间以毫秒为单位$ret = $redis->psetex('age', 10, '28');//key不存在时,才设置值,key不存在且设置成功返回true,否则返回false$ret = $redis->setnx('name', 'test');//获取键值的字符串长度,如果key不存在,返回0,如果值不为字符串返回false$ret = $redis->strlen('name');//将key中存储的数字值加1,如果key不存在先初始为0再加1,如果存储的不是数字值,则返回false,成功返回新增值$ret = $redis->incr('age');var_dump($ret);//将key中存储的数字值加指定增量值$ret = $redis->incrBy('age', 10);//将key中存储的数字值减1$ret = $redis->decr('age');var_dump($ret);//将key中存储的数字值减指定减量值$ret = $redis->decrBy('age', 10);//从列表头部插入一个值$ret = $redis->lpush('students', 'xiaoxu');$ret = $redis->lpush('students', 'xiaoxu2');var_dump($ret);//从列表尾部插入一个值$ret = $redis->rpush('students', 'xiaowang');$ret = $redis->rpush('students', 'xiaowang2');//移出并获取列表的第一个元素,若key不存在或不是列表则返回false。$ret = $redis->lpop('students');var_dump($ret);//移出并获取列表的最后一个元素,若key不存在或不是列表则返回false。$ret = $redis->rpop('students');
发表评论