• 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 中

  • 相关阅读:
    zookeeper单机环境搭建
    js中获取url?后面的参数值
    【转】java 、javaw、javaws命令的区别
    【转】解决 linux和widows双系统时差8个小时问题
    IntrospectorCleanupListener作用
    Linux 网络相关命令
    SAS:提取数据集观测,宏参数
    sas share
    SAS:多个LOG的批量查询
    SAS:日期,字符数值转换
  • 原文地址:https://www.cnblogs.com/fanBlog/p/12188174.html
Copyright © 2020-2023  润新知