本文目录一览:
PHP删除Redis所有数据
1、创建userinfo_update.php,用于查询用户信息,先显示信息,在修改:先通过GET获取用户编号查询用户信息:$sql = "select * from user_info where user_id='".$_GET['userId']."'"; $result = mysql_query($sql,$con);if($row = mysql_fetch_array($result)){}。
2、页面效果。
3、创建update.php,用于修改用户信息:使用到了mysql_affected_rows() 函数返回前一次 MySQL 操作所影响的记录行数。//通过post获取页面提交数据信息$userId = $_POST[userId];
$userName = $_POST[userName];$userAge = $_POST[userAge];
4、$sql = "update user_info set user_name='".$userName."',user_age=".$userAge." where user_id='".$userId."'";mysql_query($sql,$conn);//执行SQL$mark = mysql_affected_rows();//返回影响行数$url = "userinf_select.php"; 。
5、运行结果。
php中关于redis和数据库
select 查询的时候始终先查 redis 有没有,没有去查数据库,再把结果缓存起来;
update 修改完数据库内容后,同时对 redis 中缓存的数据做一下 update 更新操作,这样 select 查询 redis 的时候就是查询的最新数据;
同理,delete、insert 操作数据库后也要同时对 redis 中缓存的数据做 update 更新操作,这样 select 查询 redis 的时候就是查询的最新数据;
这样,所有的查询操作就都是对 redis 做缓存读取,可以缓解数据库的压力;
如何查看php是否成功装上redis扩展
用命令进行测试啊,下面是步骤:
Linux代码
$ /usr/local/webserver/redis/bin/redis-server /etc/redis/redis.conf
$ /usr/local/webserver/redis/bin/redis-cli set foo bar
//输出内容
OK
$ /usr/local/webserver/redis/bin/redis-cli get foo
//输出内容
"bar"
命令行连接:
/usr/local/webserver/redis/bin/redis-cli -h 192.168.1.112 -p 6379
php 分页查询怎么redis缓存
对于有分页条件的缓存,我们也可以按照不同的分页条件来缓存多个key,比如分页查询产品列表,page=1limit=10和page=1limit=5这两次请求可以这样缓存查询结果
productList:page:1:limit:10
productList:page:1:limit:5
这个是一种常见方案,但是存在着一些问题:
缓存的value存在冗余,productList:page:1:limit:10缓存的内容其实是包括了productList:page:1:limit:5中的内容(缓存两个key的时候,数据未发生变化的情况下)
仅仅是改变了查询条件的分页条件,就会导致缓存未命中,降低了缓存的命中率
为了保证数据一致性,需要清理缓存的时候,很难处理,redis的keys命令对性能影响很大,会导致redis很大的延迟,生产环境一般来说禁止该命令。自己手动拼缓存key,你可能根本不知道拼到哪一个page为止。
放弃数据一致性,通过设置失效时间来自动失效,可能会出现查询第一页命中了缓存,查询第二页的时候未命中缓存,但此时数据已经发生了改变,导致第二页查询返回的和第一页相同的结果。
以上,在分页条件下这样使用常规方案总感觉有诸多困扰,诸多麻烦,那是不是就应该放弃使用缓存?
基于SortedSet的分页查询缓存方案
首先想到的解决方法是使用@see ListOperationsK, V不再根据分页条件使用多个key,而是使用一个key,也不分页将全部的数据缓存到redis中,然后按照分页条件使用range(key,start,limit)获取分页的结果,这个会导致一个问题,当缓存失效时,并发的写缓存会导致出现重复数据
所以想到通过使用set来处理并发时的重复数据,@see ZSetOperationsK, V
代码逻辑如下:
range(key,start,limit)按照分页条件获取缓存,命中则直接返回
缓存未命中,查询(没有分页条件)数据库或是调用(没有分页)底层接口
add(key,valueScoreMapvalue,score)写入缓存,expire设置缓存时间
当需要清理缓存时,直接删除key,如果是因为数据新增和删除,可以add(key,value,score)或remove(key,value)
redis中会按照score分值升序排列map中的数据,一般的,score分值是sql语句的order by filedA的filedA的值,这样能保证数据一致性
但是这种方式也存在一定问题:
这个key缓存的value确实是热数据,但可能只有少数数据被频繁使用其余的可能根本就未被使用,比如数据有100页,实际可能只会用到前10页,这也会导致缓存空间的浪费,如果使用了redis虚拟内存,也会有一定影响
sql查询由原来的分页查询变成了不分页查询,缓存失效后,系统的处理能力较之前会有下降,尤其是对于大表.