Redis系列-03五种数据结构

231 阅读1分钟

字符串类型

常用api

image-20200604113052031

实战

1 计数器

记录网站每个用户个人主页的访问量

incr userid:pageview

redis天然适合做计数器,因为它是单线程的,所以在并发执行 incr时,不会存在竞争问题。

2 缓存视频

缓存视频的基本信息(数据源在mysql中)

image-20200604130240655

  • 缓存命中: 1 -> 2 -> 3.1

  • 缓存未命中: 1 -> 2 -> 3.2 ->4 -> 5

伪代码:

  public VideoInfo get(long id) {
    String redisKey = redisPrefix + id;
    VideoInfo videoInfo = redis.get(redisKey);
    if(videoInfo == null) {
      // 3.2
      videoInfo = mysql.get(id);
      if(videoInfo != null) {
        // 4 
        redis.set(redisKey, videoInfo)
      }
    }
    // 3.1 或 5
    return videoInfo;
  }

3 分布式ID

分布式ID生成器(三个Java服务并发的去生成id,但要求id不能重复)

image-20200604130756381

可以通过redis的 incr 命令来实现, 因为它是原子操作

incr id

set setnx setxx

image-20200604131208607

  • setnx : 新增操作
  • setxx :更新操作

其实这些命令都是 set命令的变形

image-20200604131750323

image-20200604131447635

mget mset

image-20200604131920553

image-20200604132006201

getset append strlen

image-20200604132307294

image-20200604132527267

incrbyfloat getrange setrange

image-20200604132637568

image-20200604132731659

字符串总结

image-20200604132800825

Hash

键值对的内部结构

image-20200604133304415

{
	"user:1:info" : {
     	"name" : "Ronaldo",
      "age" : "40",
    	"Date" : "201",
    	"viewCounter" : "50"
    }
}

重要的命令

所有Hash的命令都是以 h 开头

hget hset hdel

image-20200604134121435

image-20200604163634466

hexists hlen

image-20200604164111808

image-20200604164218361

hmget hmset

image-20200604164314421

image-20200604164405461

hgetall hvals hkeys

image-20200604164550616

image-20200604164618946

hsetnx hincrby hincrbyfloat

image-20200604165706492

哈希总结

image-20200604165744093

列表list

列表数据结构

image-20200604170125897

image-20200604170146147

  • 有序
  • 可重复

rpush

image-20200604170653456

lpush

image-20200604170726088

linsert

image-20200604170823659

lpop

image-20200604171042105

rpop

image-20200604171142003

lrem

image-20200604171318446

ltrim

image-20200604171413272

lrange

image-20200604171521815

image-20200604171607425

lindex

image-20200604171649617

llen

image-20200604171733697

lset

image-20200604171831839

阻塞操作

image-20200604173108993

集合set

集合结构

image-20200604173250045

  • 无序
  • 不可重复
  • 集合间的操作

常用API

said srem

image-20200604173633961

scard dismember srandmember smembers

image-20200604173820707

image-20200604173929601

sdiff sinter sunion

image-20200604174252369

实战

like❤️ 赞👍 踩👎

image-20200604174108656

共同关注好友

image-20200604174522656

有序集合 sorted set

有序集合结构

image-20200604174635648

集合 VS 有序集合

image-20200604174704516

主要API

有序集合都是以z开头的命令

zadd

image-20200604174919824

zrem

image-20200604175059531

zscore

image-20200604175137044

zincrby

image-20200604175240652

zcard

image-20200604175310757

zrange

image-20200604175406070

zrangebyscore

image-20200604175446672

zcount

image-20200604175514410

zremrangebyrank

z remove range by rank

image-20200604175559034

zremrangebyscore

image-20200604175658706

有序集合总结

image-20200604175758322