redis数据类型学习笔记
redis数据类型学习笔记
之前是有学过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增加某个值


List相关
-
数据结构是双向链表,插入删除效率高,一个key对应一条链表,
-
添加/修改用
lpush和rpush,移除并获取一个用lpop key和rpop 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 key和zcount key min max获取成员总量和统计范围内数量 -
zscore key member和zincrby 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(参数...){...}

浙公网安备 33010602011771号