redis类型小笔记

Redis数据类型
大图先上:

Redis不仅仅是缓存:
1、先从Redis缓存里查询数据 如果没有再到Mysql、Pgsql数据库里查询
2、db磁盘I/O瓶颈问题

优势:
1〉速度快
2〉键值对的数据结构服务器
3〉丰富的功能:
4〉简单稳定
5〉持久化
6〉主从复制
8〉高可用和分布式转移
9〉客户端语言多
应用场景:
1,缓存数据库:
2,排行榜
3,计数器应用
4,社交网络
5,消息队列(守护进程)
6, 其它场景等
String类型案例:
 echo “

”;
        //存取值
        Redis::set(‘name’,‘dashuaige’);
        echo Redis::get(‘name’);

a r r   =   [                         ′ n a m e ′ = > ′ 许 煜 乾 大 帅 哥 ′ ,                         ′ a g e ′ = > 18 ,                         ′ l i k e ′ = > ′ 迪 丽 热 巴 ′                 ] ;                 / / 批 量 存 取 值   直 接 存 数 组 , 这 里 自 动 获 取 之 后 也 是 数 组                 R e d i s : : m s e t ( arr = [             'name'=>'许煜乾大帅哥',             'age'=>18,             'like'=>'迪丽热巴'         ];         //批量存取值 直接存数组,这里自动获取之后也是数组         Redis::mset( arr = [            name=>,            age=>18,            like=>        ];        //         Redis::mset(arr);
        print_r(Redis::mget([‘name’,‘age’,‘like’]));

//追加
        Redis::append(‘name’,‘真的帅’);

//删除数据 delete可以删除一个或者多个,
        $res = Redis::del(‘name’);

print_r(Redis::mget([‘name’,‘age’,‘like’]));
  echo “”;
哈希类型案例
echo “

”;
        //存储单个
        Redis::hset(‘user:1’,‘name’,‘xuyuqian’);
        //获取单个
        echo Redis::hget(‘user:1’,‘name’),"
";

//批量存储多个
         a r r   =   [                         ′ n a m e ′ = > ′ h u a n g q i n t a n g ′ ,                         ′ a g e ′ = > 50 ,                         ′ l i k e ′ = > ′ 肥 婆 ′                 ] ;                 R e d i s : : h m s e t ( ′ u s e r : 2 ′ , arr = [             'name'=>'huangqintang',             'age'=>50,             'like'=>'肥婆'         ];         Redis::hmset('user:2', arr = [            name=>huangqintang,            age=>50,            like=>        ];        Redis::hmset(user:2,arr);
        //卧槽这两个既然相等
        print_r(Redis::hmget(‘user:2’,[‘name’,‘age’,‘like’]));
        print_r(Redis::hgetall(‘user:2’));

//del能能直接删除诶批量删除
        //Redis::del(‘user:2’);
        Redis::hdel(‘user:2’,‘name’); //hdel是专门删除hash单个值的
        print_r(Redis::hgetall(‘user:2’));
 echo “”;
哈希跟string区别
1,原生:set user:1:name Pack
set user:1:age 18; set user:1:sex man;
优点:简单直观,每个键对应一个值
缺点:键数过多,占用内存多,用户信息过于分散,不用于生 产环境

2,将对象序列化存入redis
set user:1 serialize(userInfo);
优点:编程简单,若使用序列化合理内存使用率高
缺点:序列化与反序列化有一定开销,更新属性时需要把 userInfo全取出来进行反序列化,更新后再序列化到redis

3,使用hash类型:
hmset user:1 name Luke age 18 sex man
优点:简单直观,使用合理可减少内存空间消耗
缺点:要控制ziplist与hashtable两种编码转换,且hashtable 会消耗更多内存erialize(userInfo);
List类型的实例
        //好像不能批量插入,只能用循环一个个插入
//        for( i   =   1 ;   i = 1;  i = 1; i<= 10;KaTeX parse error: Expected '}', got 'EOF' at end of input: …'test:list:3', i);
//        }
        //获取全部
        dump(Redis::lrange(‘test:list:3’,0,-1));

//删除一个
        //Redis::rpop(‘test:list:3’);
        dump(Redis::lrange(‘test:list:3’,0,-1));
//        //批量删除
//        Redis::ltrim(‘test:list:1’,0,0);
//        dump(Redis::lrange(‘test:list:1’,0,-1));

Set集合的实例
/*
* 无序集合
* 求出并集自动去重
* sunion key1 key2
* 求出交集
* sinter key1 key2
* 求出差集
* sdiff key1 key2 以key1集合为主,谁在前谁是主
*/
//添加
Redis::sadd(‘class:1’,‘name’,‘age’,‘like’);
a r r = [ ′ n a m e ′ , ′ a g e 11 1 ′ , ′ l i k e ′ ] ; R e d i s : : s a d d ( ′ c l a s s : 2 ′ , arr = ['name','age111','like']; Redis::sadd('class:2', arr=[name,age111,like];Redis::sadd(class:2,arr);

    //获取多个
    dump(Redis::smembers('class:2'));

    //删除
    dump(Redis::del('class:2'));
    dump(Redis::smembers('class:2'));
    echo "--------------------------------------------------------------------","<br>";
    /*
     * 有序集合
     */
    //添加
    Redis::zadd('class:3',5,'name');
    Redis::zadd('class:3',6,'name1');
    Redis::zadd('class:3',4,'name2');

    //获取
    dump(Redis::zrange('class:3',0,-1));

    //删除
    dump(Redis::del('class:3'));
    dump(Redis::zrange('class:3',0,-1));

无序集合应用特点:
标签,社交,查询有共同兴趣爱好的人,智能推荐
使用方式:
给用户添加标签:
sadd user:1:skill mysql redis kafka
sadd user:2:skill kafka rabbitmq

或给标签添加用户
sadd basball:users user:1 user:2
sadd fball:users user:1 user:2

计算出共同感兴趣的人:
sinter user:1:fav user2:fav
有序集合应用特点:
常用于排行榜,如游戏需要对充值数据做排行榜,或社交网站点赞数 与集合有联系,不能有重复的成员

集合跟list的区别:

全局命令:
1,查看所有键:
keys * set school enjoy set hello world
2,键总数 :
dbsize //2个键,如果存在大量键,线上禁止使用此指令
3,检查键是否存在:
exists key //存在返回1,不存在返回0
4,删除键:
del key //del hello school, 返回删除键个数,删除不存在键返回0
5,键过期:
expire key seconds //set name test expire name 10,表示10秒过期
ttl key // 查看剩余的过期时间
6,键的数据结构类型:
type key //返回string,键不存在返回none

一个订单的消息队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值