• Rredis五中数据类型


    1.String 

    1)常用命令: value类型可以是:字符串,数字,二进制

     2)应用:

    分布式锁

    1 设置字符串key,若存在则设置失败
    SETNX("key",value)==1//设置成功获取锁
    SETNX("key",value)==0)//资源已经被占用,设置失败
    
    2 业务处理完毕释放分布式锁
    
    del(key);
    
    3 设置锁失效时间,防止宕机,系统运行意外,导致锁无法释放
    EXPRISE("key","有效时间)
    public synchronized boolean lock(String key, Integer expire) {
            RedisConnection connection = getConnection();
            try {
                log.info("使用redis加锁 key:{},expire={}",key,expire);
                Boolean setNX = connection.setNX(key.getBytes(), "value".getBytes());
                if (setNX) {
                    connection.expire(key.getBytes(), expire);
                    log.info("已获取到锁 key:{},expire={}",key,expire);
                }
                return setNX;
            } catch (Exception e) {
                log.error("使用redis加锁发生异常(key:{} ",key,e);
                return false;
            } finally {
                connection.close();
            }
        }

      

      

     计数器:  

    1 INCR key // INCR readcount::{帖子ID}
    2 Get key// get readcount::{帖子ID}

    分布式全局序列: 

     

      

     2.Hash

    Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)

    1)常用命令

      

     是一个类似于:HashMap<String,HashMap<String,String>类型的数据结构

     面试题:

    1)hash键的意义何在?

    1 hash键可以将信息凝聚在一起,而不是直接分散的存储在整个redis中,这不仅方便了数据管理,可以避免一点的误操作。?

    2 避免键名冲突

    3 减少内存占用 

    2)不能使用hash键的情况:

    1过期功能的使用,过期功能只能使用在key上;(因为里面是存的 key field value 只能对key 设置过期,没法真正的对field 设置过期,所以说不支持分布式锁)

    2 二进制操作命令如:SETBIT、GETBIT、BITOP

    3 需要考虑数据分布的问题(是根据key,做hash算法,如果key 一样无论如何hash都是在同一台机器上面,那么就失去了分布式的意义)

     3.List 

      

     1)常用命令

      2)应用:

    实现阻塞消息队列:

    实现用户消息列表

    暖暖userID(201)关注:青山老师,TOM老师,科比,登科

    1 青山老师发微博,消息ID为1201

    LPUSH  201 1201

    2 TOM老师发消息,消息ID为1202

    LPUSH 201 1202

    分页获取201的消息列表:LRANGE 201 0,1*10 (分页获取)

    索引下标 消息ID
    0 1201
    1 1202
    2 1203

    4.Set

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)

    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 

     1)常用命令

      2)应用

    实现直播刷礼物,转发参加抽奖活动

    SADD key {userid}_1 刷礼物,转发微博加入到集合键中

    SMEMBERS key 获取所有用户,大轮盘转起来

    SPOP key count/SRANDMEMBER  key [count] 抽取 count名中奖者 :SRANDMEMBER key [count](返回集合中一个或多个随机数)


    实现点赞,签到,like等功能

    点赞:SADD kile::8001(被赞者)  1001(当前点赞用户)

    取消点赞:SREM like::8001 1001 (从集合中移除1001)

    检查用户是否点过赞:SISMEMBER like::8001 1001 (SISMEMBER :判断 member 元素是否是集合 key 的成员)

    获取用户的点赞列表:SMEMBERS like::8001(SMEMBERS返回集合中的所有成员)

    获取点赞用户数:SCARD like::8001 (scard:获取集合的成员数)

    基于集合运算实现关注模型(可能认识的人)

    Seven关注的人:sevenSub:{qing,mic,james}

    青山关注的人:qingSub:{seven,jack,mic,james}

    Mic关注的人:micSub:{seven,james,qing,jack,tom}

    我和青山共同关注:SINTER sevenSub,qingSub {mic,james} (返回给定所有集合的交集)

    我(Seven)关注的人也关注他:SISMEMBER mincSub  (遍历我关注的人员列表,判断是否在他的关注列表中,在表示同时关注了他,否则则没有关注)  (判断 member 元素是否是集合 key 的成员)

    我可能认识的人:SDIFFSTORE sevenMayKnow qingSub sevenSub{seven,jack}  

    SDIFFSTORE destination key1 [key2]
    返回给定所有集合的差集并存储在 destination 中,以key1为基准,在key2中不存在的,即为差集

    实现商品筛选

    SINTER 

     实现订单系统与支付系统间对账

     5.Zset

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。有序集合的成员是唯一的,但分数(score)却可以重复。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

      

     1)常用命令 

      

     2)应用

    实现排行榜(单日,周,月,年)

    日排行榜

    点击

    ZINCRBY hotNews:20200113  1 文章标题 (ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment)

    展示排行:倒序取10条,并携带score的值,score值为搜索值

    ZREVRANGE hotNews::20200113  0 10 withscores (ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低)

    周排行榜

    ZUNIONSTORE   

     ZUNIONSTORE destination numkeys key [key ...]计算给定的一个或多个有序集的并集,并存储在新的 key 中

  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/fanBlog/p/12188174.html
Copyright © 2020-2023  润新知