redis Q&A
2020-05-07 本文已影响0人
X1_blog
概念:
是一个分布式key-value数据库, 可以脱离mysql 独立运行, 端口6379
redis 各类型的使用场景
string -> key: string -> 记录最大用户ID/定时计数器 -> 存储简单的数据
list -> key: [a,b,a...] -> 消息队列/时间轴/循环链表(rpoplpush) -> 按时间排序的内容
set -> key: [a,b,c...]-> 存储点赞的用户ID/计算好友关系/(互相关注/共同关注)(sinter)/ 构造倒排索引(前缀搜索功能)-> 存储唯一的数据
eg: set 's' [selena_id ], 检索s可以访问steve 和 selena的用户信息, 实现前缀检索
sorted set -> key: string -> 热度排行榜 -> 需要根据某个指标排序的内容
hash -> key: string -> 存储用户信息 -> 存储不需要排序的详细信息映射
redis 一共支持5种数据类型
string , list , set , sortedset, hash
redis 和memcache的区别?
- Redis支持数据的持久化
- redis 提供了更多的数据类型 : list , set ,sortset, hash
- redis 支持数据备份 (save/bgsave)
redis持久化2种方式
redis持久化有rdb和aof 两种方式, rdb 的一致性 和完整性比较差; aof完整性更好, 但是使用时间长会导致文件过大, 恢复效率低
redis 命令行密码登录
redis-cli -h localhost -a 你的密码
redis的作用有哪些,什么时候使用redis?
...
redis 主从复制
...
php 连接redis的方法
- 安装phpredis 扩展
- 连接redis
yum install php-pecl-redis5 -y # 安装扩展
# 连接测试
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server successfully"."\n";
echo "Server is running: " . $redis->ping()."\n";
设置登录密码
config set requirepass 123 # 设置登录密码(临时)
# redis.conf 找到 requirepass, 设置密码为123
requirepass 123
# 分配客户端ip
bind 192.168.1.100
# 启动并指定配置文件
redis ./redis.conf
Demo:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('123');
echo "Connection to server successfully"."\n";
echo "Server is running: " . $redis->ping()."\n";
# string
$redis->set("key","value"); # 插入值
echo $redis->get("key")."\n"; # 取值
# set
$redis->sadd("set","1"); # 插入值
$redis->sadd("set","2");
$redis->sadd("set","2");
$redis->spop("set","1"); # 弹出值
print_r( $redis->smembers("set"));
# sorted set
$redis->zadd("sset1",6,"redis"); # 插入元素
$redis->zadd("sset1",7,"mongodb");
$redis->zadd("sset1",8,"mysql"); # 重复无效, 被覆盖
$redis->zadd("sset1",9,"mysql");
print_r( $redis->zrange("sset1",0,-1,"withscores")); # 排序输出
print_r( $redis->zrevrange("sset1",0,-1,"withscores")); # 逆排序输出
print_r( $redis->zscore("sset1","mysql")); # 输出权重
print_r( $redis->zrank ("sset1","redis")); # 输出当前元素排位
print_r( $redis->zrevrank ("sset1","redis")); # 输出当前元素逆排位
echo "\n\n";
# list
$redis->ltrim("list",1,0); # 清空list
$redis->lpush("list","1a"); # 插入元素
$redis->lpush("list","2b");
$redis->lpush("list","1a");
$redis->lpop("list"); # 弹出元素
echo $redis->llen("list")."\n"; # 返回list长度
print_r( $redis->lrange ("list",0,-1)); # 返回整个list
# hash
$redis->del('hash'); # 清空哈希表
$redis->hset('hash','key1','value1');
$redis->hset('hash','key2','value2');
$redis->hset('hash','key3','value3');
print_r( $redis->hkeys ("hash")); # 返回所有键
$redis->hdel('hash','key1','key2'); # 删除多个键
var_dump( $redis->Hexists('hash','key31') ); # 判定键是否存在
var_dump( $redis->hget ("hash","key2")); # 取值
print_r( $redis->hgetall ("hash")); # 返回整个hash