redis都是key-value的结果存储的,value可以存储String Number Float Bits等,但是最大的大小是512M。Redis中的key也是基于String类型存储,所以最大也是521M
命令 | 示例 | 说明 |
---|---|---|
mset | mset key1 value1 key2 value2 | 批量设置key1=value1, key2=value2 |
mget | mget key1 key2 | 批量获取 |
strlen | strlen key1 | 获取value1长度 |
append | append key1 11 | 追加内容 |
getrange | getrange key1 0 3 | 获取指定范围的字符 |
incr | incr intkey 、 incrby intkey 10 | 整数值递增 默认+1,可设置递增值 |
incrbyfloat | incrbyfloat key3 1.1 | 浮点值递增 |
扩展:
set mylock 1 EX 10 NX
EX 设置指定的到期时间(秒)
PX 设置指定的到期时间(毫秒)
NX 仅在键不存在时设置键
XX 只有在键已存在时才设置
String 更多指令参考:https://redis.io/commands/?group=string
依赖引入
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redis- reactiveartifactId>
dependency>
配置序列化方式
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFact ory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSeri alizer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet(); return redisTemplate;
}
}
public List<Product> selectProduct() throws InterruptedException {
String key = "productList";
List<Product> products = (List<Product>) redisTemplate.opsForValue().get(key);
if (products == null) {
//加锁 为了防止缓存 击穿(后面会讲),防止并发的时候请求全部并发打到DB
synchronized (Product.class){
products = (List<Product>) redisTemplate.opsForValue().get(key); //双重检查,如果不再 次检查就算加锁,请求还是会打到DB,只不过并行改成了串行
//再次判断,保证进入DB只有 一次
if (products==null) {
products = productMapper.selectProduct();
if (products != null) {
//查询数据不为 空,塞回到redis
redisTemplate.opsForValue().set(key, products, 5, TimeUnit.MINUTES); //设置时间,因为DB根redis有数据一致性问 题,保证最终一致
}
}
}
}
return products;
}
用来存储一组相关信息,方便更多的场景使用
命令 | 示例 | 说明 |
---|---|---|
hset | hset A a 1 、hset A b 1 | 给key=A 设置k-v值 |
hmset | hmset A a 1 b 2 c 3 | 批量设置k-v值 |
hget | hget A a | 获取 k-v 中k=a的值 |
hmget | hmget A a b c | 批量获取值 |
hkeys | hkeys A | 获取所有A的keys |
hvals | hvals A | 获取所有A的values |
hgetall | hgetall | 获取所有A 的k-v |
hincrby | hincrby A a 10 | 给A的a对应value增加10 |
hexists | hexists A a | 查询key中 a是否存在 |
hdel | hdel A a | 删除key中 a |
hlen | hlen A | 查看key中k-v数据长度 |
存储有序的字符串列表,元素可以重复。列表的最大长度为2^32-1个元素
命令 | 示例 | 说明 |
---|---|---|
lpush | lpush que a lpush que b c | 左添加元素 |
rpush | rpush que d e | 又添加元素 |
lpop | lpop que | 左弹出一个元素 |
rpop | rpop que | 右弹出一个元素 |
blpop | blpop que 2 | 左弹出一个元素并设置超时,直到有数据弹出或者超时 |
brpop | brpop que 2 | 右弹出一个元素并设置超时,直到有数据弹出或者超时 |
lindex | lindex que 0 | 查看第1个元素 |
lindex | lindex que 0 -1 | 查看所有元素 |
string类型的无需元素集合 ,最大存储2^32-1。并且添加、删除元素的时间都是O(1)。
命令 | 示例 | 说明 |
---|---|---|
sadd | sadd A a b c | 添加一个或者多个元素 |
smembers | smembers A | 查看所有元素 |
scard | scard A | 获取所有元素个数 |
srandmember | srandmember A | 随机弹出一个元素 |
spop | spop A | 随机弹出一个元素 |
srem | srem A a | 弹出指定元素 |
sismember | sismember A a | 查看元素是否存在 |
sdiff | sdiff A B | 获取前一个集合有而后集合没有的元素 |
sinter | sinter A B | 获取两个集合的交集 |
sunion | sunion A B | 获取两个集合的并集 |
sorted set,有序的set,每个元素有个score,score相同时,则按照key的ASCII码排序。
命令 | 示例 | 说明 |
---|---|---|
zadd | zadd Z 10 a 20 b 30 c | 批量添加 |
zrange | zrange Z 0 -1 withscores | 根据分数从低到高 |
zrevrange | zrevrange Z 0 -1 withscores | 根据分数从高到低 |
zrangebyscore | zrangebyscore z1 20 30 | 根据分数范围获取值 |
zrem | zrem z1 a | 移除元素 |
zcard | zcard z1 | 获取zset个数 |
zincrby | zincrby z1 20 b | 给某个元素加分 |
zcount | zcount z1 50 60 | 获取范围内的个数 |
zrank | zrank z1 d | 返回指定元素的索引 |
zscore | zscore z1 d | 获取元素的分数 |
位图不是实际的数据类型,而是String类型中定义的一种面向位的操作,所以这个位图最大长度为512M
命令 | 示例 | 说明 |
---|---|---|
setbit | setbit permission 5 1 | 设置位的值 |
getbit | getbit permission 5 | 获取位的值 |
bitcount | bitcount permission | 获取key的为1的个数 |
bitpos | bitpos permission 1 | 获取0或者1的第一位 |
bitop AND | bitop AND hbit permission_1 permission | 获取多个bitmap的位操作,比如& , 获取bitkey与permission 的&运算 并且赋值给hbit |
实时统计数据
考勤:如第一天 第三天 第十天签到
setbit user1 1 1
setbit user1 3 1
setbit user1 10 1
统计考勤天数
bitcount user1