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' [steve_id ,selena_id ], 检索s可以访问steve 和 selena的用户信息, 实现前缀检索

sorted set -> key: string -> 热度排行榜 -> 需要根据某个指标排序的内容

hash -> key: string -> 存储用户信息 -> 存储不需要排序的详细信息映射

redis 一共支持5种数据类型

string , list , set , sortedset, hash

redis 和memcache的区别?

  1. Redis支持数据的持久化
  2. redis 提供了更多的数据类型 : list , set ,sortset, hash
  3. redis 支持数据备份 (save/bgsave)

redis持久化2种方式

redis持久化有rdb和aof 两种方式, rdb 的一致性 和完整性比较差; aof完整性更好, 但是使用时间长会导致文件过大, 恢复效率低

redis 命令行密码登录

redis-cli -h localhost -a 你的密码

redis的作用有哪些,什么时候使用redis?

...

redis 主从复制

...

php 连接redis的方法

  1. 安装phpredis 扩展
  2. 连接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
上一篇下一篇

猜你喜欢

热点阅读