redis数据类型学习笔记

redis数据类型学习笔记

之前是有学过redis不过一直没用导致忘光光,再复习一遍

参考:

qmqm33的博客

redis中文网

String相关

  • 基本set/get/del/strlen/apppend

  • mset/mget 一行命令同时设置/获取多个键值对

    > mset jo1 dio1 jo2 dio2
    OK
    > mget jo1 jo2
    dio1
    dio2
    
  • incr/incrby/incrbyfloat 设置key增加,减少类似,把in换成de即可

    > set rid 1
    OK
    > incrby rid 5
    6
    > incr rid
    7
    
  • 设置数据的时效性 setex key seconds value / psetex key milliseconds value

  • 数据库中相关key设置约定,用:分隔(参考),或者不要字段就存放一个json对象

    表名 主键名 主键值 字段名
    user id 1 name

Hash相关

  • 一个key对应一个hash结构,field代表hash的键/字段,value代表hash的

    > hset y_hash k1 v1
    1
    > hget y_hash k1
    v1
    > hset y_hash k2 v2
    1
    > hgetall y_hash
    k1
    v1
    k2
    v2
    
  • hdel key field [field ...] 删除一个或多个hash 的k-v.

  • hmset ... 添加/修改多个hash的k-v,hmget ... 获取多个

  • hlen key获取k-v数量,hexists key field判断是否存在某个键

  • hkeys key获取所有键,hvals key获取所有值

  • hincrby key field increment 增加某个值

image-20200717215141582

image-20200717215653711

List相关

  • 数据结构是双向链表,插入删除效率高,一个key对应一条链表,

  • 添加/修改用 lpushrpush,移除并获取一个用lpop keyrpop key

  • 获取全部元素lrange key 0 -1,

  • 移除特定元素lrem key count value

    • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
    • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
    • count = 0 : 移除表中所有与 VALUE 相等的值。
  • 应用场景:展示用户的关注列表,最新的在最前

set相关

  • set是无序集合,成员不允许重复,hash表实现,各操作复杂度O(1)

  • sadd key member [member ...]增加成员

  • srem key member [member ...]移除成员

  • smembers key获取所有成员,scard key获取个数

  • sismember key value 判断是否包含成员1包含0不包含

  • 应用:随机推荐,求交集并集什么的,黑白名单,记录网站各种访问数据

    • string来配合incr来统计PV
    • set配合cookie/ip来记录UV/IP

sorted_set

  • 其他见Redis中文网

  • sorted_set的成员带有一个score用来排序

  • zadd key score member[score member ...]添加/更新成员

  • zrange key 0 -1 [withscores]获取数据,低到高,带参数则带上score

  • zrevrange key 0 -1 获取数据从高到低

  • zrem key member [member ...]删除成员

  • z[rev]rangebyscore key min max [withscores] 获取指定范围成员

  • z[rev]rank key member 获取成员排名(索引)

  • zcard keyzcount key min max获取成员总量和统计范围内数量

  • zscore key memberzincrby key increment member修改成员分数

  • 应用:投票,排行榜,活跃度统计,任务/消息权重应用

BitMap 位图

  • bit 对应的key是以bit为单位的数组,值只有0或1,下标叫做offset(偏移量)

    127.0.0.1:6379> setbit sb 0 1
    (integer) 0
    127.0.0.1:6379> setbit sb 1 1
    (integer) 0
    127.0.0.1:6379> getbit sb 0
    (integer) 1
    127.0.0.1:6379> getbit sb 1
    (integer) 1
    127.0.0.1:6379> getbit sb 2
    (integer) 0
    
  • bit count获取value为1的数量,bitpos key 0/1获取第一次出现的0或者1的offset

  • bitop [operation] destkey key[key ...]进行逻辑运算结果,结果保存到目标destkey

  • bitfield 还没看 置零有点复杂

  • 应用:统计用户相关行为 (用户量巨大的时候用很好)

key通用指令

  • key是字符串,key操作包含:删除,判断存在,获取类型,时效性相关,指定策略查询

  • del key删除指定key,exists key判断是否存在 ,type key获取类型

  • key的时效性控制

    • pexpire key milliseconds 设置 key 的过期时间以毫秒计算。

    • expire key seconds设置 key 的过期时间以计算。

    • expireat key timestamp 过期at,接收秒时间戳

    • pexpireat key millinseconds-timestamp过期at,接收毫秒时间戳

    • [p]ttl key获取有效时间 带p则是毫秒 不存在-2 无实效性-1

    • persist key将key转化为永久性

  • key查询keys pattern

  • * 匹配任意数量任意呼号: *jojo*

  • ?匹配任意一个符号: ?oj?

  • []匹配指定符号:[st]匹配带有s或者带有t的

其他指令

  • getset key value 获取key的值并重新为key设置值

    127.0.0.1:6379> set k1 11
    OK
    127.0.0.1:6379> getset k1 0
    "11"
    127.0.0.1:6379> get k1
    "0"
    
  • setnx key value设置k-v对,当key已存在则不操作并返回0,当key不存在设置值并返回1

  • 两个联合起来可以搞分布式锁🔒

springboot中启用缓存

  • 引入redis-starter依赖spring-boot-starter-data-redis

  • redis的config类或者启动类加上@EnableCaching

  • Cache相关注解要指定value/cacheNames 属性,作为redis的主key

    • @Cacheable(cacheNames = "commentCache", key = "123")
    • @Cacheable("commentCache"),这种方式副key使用默认策略生成,支持SpringEL表达式
  • @Cacheable标记在方法或者类上,表示该方法或者该类的所有方法支持缓存

    • 当首次被调用时,spring会自动用redis把方法的返回值进行缓存
    • 使用时先去redis查询有没有相关键,有就直接从redis取值,不执行方法
    • condition属性指定发生的条件,写法也是SpringEL表达式
  • @CachePut 的属性跟@Cacheable类似,不同的是不会检查之前的缓存结果,只会执行该方法并放入缓存

  • @CachePut()@Cacheable() 注解的方法返回值要一致

  • @CacheEvict用来清除某个@Cacheable生成的缓存,跟@Cacheable配合获取最新数据

  • allEntries = true清除cacheNames对应的所有缓存,忽略指定key

  • cacheNames这个属性可以在该类上添加@CacheConfig(cacheNames = "something"),该类的里具体方法的@Cacheable()就不用再写cacheNames这个属性

  • 被缓存的对象数据要实现可序列化接口

  • 用法举例:

    // 调用这个方法就会移除`something::123`这个key-value
    @CacheEvict(cacheNames = "something", key = "123")
    public Reuslt doSomething(参数...){...}
    // 调用这个方法会去redis判断有没有`something::123`,有就从这取值
    @Cacheable(cacheNames = "something", key = "123")
    public Reuslt getSomething(参数...){...}
    

参考网站

如何使用RedisTemplate访问Redis数据结构

SpringBoot整合redis

springboot redis 项目实战 完整篇

Redis详解 - SpringBoot整合Redis,RedisTemplate和注解两种方式的使用

posted @ 2020-07-18 11:02  禾几元  阅读(94)  评论(0)    收藏  举报