• Redis 入门和数据类型讲解


    官网

    官网:http://www.redis.cn/

    概念

    开源的高性能键值对数据库

    16个数据库

    端口号  6379

    (端口号的范围是从0到65535

    1023以下的端口已经分配给了常用的一些应用程序)

    进入客户端

    redis-cli

    密码

    查看密码:CONFIG get requirepass

    设置密码:CONFIG set requirepass "123456"

    输入密码:AUTH "123456"

    数据类型

    基本数据类型:string,hash,list,set,zset

    特殊数据类型:Geo,Bitmap,Hyperloglog

    字符串:string

    是简单的 Key-Value 类型

    一个字符串类型的值能存储最大容量是多少? 512M

    场景:分布式锁,分布式session,秒杀,计数

    set key val

    get key

    mget key key key

    del key

    incr key:自增

    decr key:自减

    incrby key 3:自增3

    decrby key 3:自减3

    keys *:查看所有key

    哈希:hash

    是 string 类型的 key 和 val 的映射表,哈希散列表

    场景:存储对象数据(用户信息)

    hset 哈希名 键名 值

    hget 哈希名 键名

    hmset 哈希名 键名 值 键名 值

    hmget 哈希名 键名 键名

    hgetall 哈希名:得到此哈希里所有的键名和值

    hkeys 哈希名:得到此哈希里所有的键名

    hvals 哈希名:得到此哈希里所有的值

    hdel 哈希名 键名

    hexists 哈希名 键名:键是否存在,返回1或0

    hincryby 哈希名 键名 3:自增3

    列表:list

    存储多个有序的字符串

    场景:渲染文章列表,一般情况下每个用户都会有自己发布的文章列表,如果需要展示文章列表,就可以使用List数据类型,不但可以有序而且可以按照索引范围去查询文章列表。

    rpush 列表名 值 值:将 一个 或 多个 值 推入 列表 的 右端

    lpush 列表名 值 值:将 一个 或 多个 值 推入 列表 的 左端

    rpop 列表名:移 除 并 返回 列表 最 右端 的 元素

    lpop 列表名:移 除 并 返回 列表 最 左端 的 元素

    lindex 列表名 下标:返回列表指定下标的值(下标从0开始)

    lrange 列表名 开始下标 结束下标:返回列表指定下标范围的值

    ltrim 列表名 开始下标 结束下标:只保留下标范围的值

    blpop 列表名 列表名 秒数:在指定时间移 除 并 返回 第一个非空列表 最 左端 的 元素

    rpoplpush 列表名 列表名:从第一个列表中弹出位于最右端的元素,将这个元素 推入第二个列表的最左端

    brpoplpush 列表名 列表名 秒数:rpoplpush的阻塞版本,在指定秒数后才会结束

    无序集合:set

    不允许出现重复的元素,并且是无序的

    场景:记录唯一值:比如登录ip,身份证号。添加标签:通过标签的交并集计算用户喜好程度等数据,共同好友。

    sadd 集合名 值 值

    srem 集合名 值 值:删除一个或多个值

    sismember 集合名 值:检查值是否存在集合中

    scard 集合名:返回集合中存在值的个数

    smembers 集合名:返回集合中所有的值

    srandmember 集合名 3:从集合里面随机地返回3个元素。(3为正数,返回的元素不会重复;如果是-3,返回的随机元素可能会重复 )

    spop 集合名:随机删除一个

    smove 集合名 集合名 值:将第一个集合中的一个值移到第二个集合

    sdiff 集合名 集合名 集合名:得到存在与第一个集合,但不存在与其他集合的值(差集运算)

    sdiffstore 指定集合名 集合名 集合名 集合名:将存在与第一个集合,但不存在与其他集合的值移到指定集合

    sinter 集合名 集合名 集合名:得到所有集合同时存在的值(交集运算)

    sinterstore 指定集合名 集合名 集合名 集合名:将所有集合同时存在的值移到指定集合

    sunion 集合名 集合名 集合名:得到所有集合的值(并集运算)

    sunionstore 指定集合名 集合名 集合名 集合名:将所有集合的值移到指定集合

    有序集合:zset

    数据有序且键值对唯一的集合

    场景:排行榜:根据积分排序从小到大。获取某个范围的数据:考试80-100分的数据

    zadd 集合名 score值 值 score值 值

    zrem 集合名 值 值:删除

    zremrangebyrank 集合名 结束值 开始值:删除集合排名在某个范围之间的值

    zremrangebyscore 集合名 结束值 开始值:删除集合score值在某个范围之间的值

    zincrby 集合名 3 值:给集合某个值的score加3

    zcard 集合名:个数

    zcount 集合名 开始值 结束值:得到集合score值在某个范围的值的个数

    zscore 集合名 值:得到某个值在集合中的score值

    zrank 集合名 值:得到某个值在集合中的排名(排名从0开始)(最小的排名为0)

    zrevrank 集合名 值:按score值从大到小排列,得到某个值的排名

    zrange 集合名 开始值 结束值 withscores:得到集合排名在某个范围之间的值(从小到大),如果加上withscores,也会得到score值

    zrevrange 集合名 开始值 结束值 withscores:得到集合排名在某个范围之间的值(从大到小),如果加上withscores,也会得到score值

    zrangebyscore 集合名 开始值 结束值 withscores limit 开始下标 结束下标:集合score值在某个范围之间的值(从小到大),如果加上withscores,也会得到score值,如果加上limit 开始下标 结束下标,是得到在排好顺序基础上的某个范围的值,即可进行分页查询功能

    zrevrangebyscore 集合名 结束值 开始值 withscores 开始下标 结束下标:集合score值在某个范围之间的值(从大到小),如果加上withscores,也会得到score值,如果加上limit 开始下标 结束下标,是得到在排好顺序基础上的某个范围的值,即可进行分页查询功能

    zinterstore 指定集合名 后面集合名的个数 集合名 集合名:求值的交集,然后将交集结果存到指定集合里一份(score值会进行加法运算)

    zunionstore 指定集合名 后面集合名的个数 集合名 集合名:求值的并集,然后将并集结果存到指定集合里一份(score值会进行加法运算)

    地理位置:Geo(Geospatical)(版本要求:Redis3.2)

    GEO底层的实现原理其实就是Zset,我们可以使用Zset命令来操作GEO

    场景:定位、查看附近的人、朋友的定位、打车距离计算

    geoadd 集合名 经度 维度 地名 经度 维度 地名

    geopos 集合名 地名:返回所有给定位置元素的位置(经度和纬度)

    geodist集合名 地名 地名 单位:返回两个给定位置之间的直线距离(单位默认是m,单位还有km mi(英里) ft(英寸))

    georadius 集合名 经度 纬度 半径 单位 withdist withcoord withhash asc/desc count 2:以给定的经纬度为中心,找出某一半径内的元素(withdist是将位置元素与中心之间的距离也一并返回)(withcoord是将位置元素的经度和维度也一并返回,即显示他人的定位信息)(withhash是以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。)(asc/desc:asc是根据中心的位置, 按照从近到远的方式返回位置元素,desc是根据中心的位置, 按照从远到近的方式返回位置元素)(count 2是指定返回几个地点)

    georadiusbymember 集合名 地名 半径 单位:找出位于指定范围内的元素,中心点是由给定的位置元素决定(以当前地名为中心,找出半径以内的元素)

    geohash 集合名 地名 地名:返回一个或多个位置元素的Geohash字符串(将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近)(11个字符)

    位图场景:Bitmap

    Bitmap是位图,数据结构,都是操作二进制位来进行记录,就只有0和1两个状态

    场景:统计用户信息、活跃、不活跃、登录、未登录、打卡等等… 两个状态的都可以使用Bitmap

    setbit 集合名 键名 值:(值只能为0或者1)

    getbit 集合名 键名:获取集合中某个键的值

    bitcount 集合名:获取集合中值为1的键的个数

    基数统计:Hyperloglog

    一个可重复集合内不重复元素的个数就是基数

    传统的方式:使用set保护用户的ID,然后就可以统计set中的元素数量作为标准判断,这个方式如果保存大量的用户id,就会比较麻烦。我们的目的是为了计数,而不是存储用户id。

    优点:占用的内存是固定的,2^64不同元素的技术,只需要费12KB内存。如果要从内存角度来比较的话,Hyperloglog是首选

    如果允许容错,那么一定要使用Hyperloglog;如果不允许容错,就使用set或者自己的数据类型即可。(容错就是当由于种种原因在系统中出现了数据、文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行的一种技术,很简单的意思)

    场景:页面统计,网页的UV(一个人访问一个网站多次,但是还是算作一个人)

    pfadd 集合名 值 值:添加一个或者多个元素

    pfcount 集合名:统计集合中基数的个数

    pfmerge 新集合名 集合名 集合名:合并集合的元素,并且剔除其中重复的元素,产生新的集合

  • 相关阅读:
    Spring boot 项目(二十五)——集成rocketmq实现简单的消息测试
    Spring通过注解管理Bean对象
    ListView[new]
    Revit API: Pipe & Duct -管道和风管
    基于GIS的生态安全网络格局构建(附练习数据下载)
    思科交换机65系列配置
    TCP 三次握手与四次挥手深入探究(大图解)
    MySQL 批量修改表的列名为小写
    Solr安装使用教程
    明峰医疗冲刺科创板:年营收3.5亿元 拟募资6.24亿
  • 原文地址:https://blog.csdn.net/a18132147899/article/details/125533986