Redis基础

Redis

redis中文官网
搜索redis命令中文参考redis命令

Redis基础

关系型数据库与非关系型数据库区别
应用场景
在这里插入图片描述
不同数据库比较
在这里插入图片描述
缓存读取过程:
在这里插入图片描述
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题解释参考

一致哈希算法参考

Redis数据类型

在这里插入图片描述

string字符串类型

数据结构:
在这里插入图片描述

  1. 常用命令
    在这里插入图片描述
  2. 自增自减
    在这里插入图片描述
  3. 其他操作
  • 获取字符串长度
  • 往字符串append内容
  • 设置和获取字符串的某一段内容
  • 设置及获取字符串的某一位(bit)
  • 批量设置一系列字符串的内容

在这里插入图片描述

//ex:秒级过期时间,nx:键不存在时才能设置成功,xx键存在时才能设置成功
set key value [ex seconds] [px milliseconds] [nx|xx]
get key

mset key value [key value ...]
mset a 1 b 2 c 3 d 4

mget key [key ...]
mget a b c d

incr key

append key value

strlen key
getset key value

setrange key offeset value
//例子
 set redis pest
 setrange redis 0 b
 get redis
 结果:"best"
 
 getrange key start end

使用场景

缓存
//  定义键
userRedisKey = "user:info:" + id;
//  从 Redis 获取值
value = redis.get(userRedisKey);
if (value != null) {
//  将值进行反序列化为 UserInfo 并返回结果
userInfo = deserialize(value);
return userInfo;
}

计数:点赞,视频播放量,每播放一次就+1
long incrVideoCounter(long id) {
key = "video:playCount:" + id;
return redis.incr(key);
}

接口防刷:验证码登录,公司一般的验证码等发短信功能都是调用的第三方接口,如果被有心之人利用了,会给公司造成一定的损失,所以简单的解决方法就是限流
phoneNum = "138xxxxxxxx";
key = "shortMsg:limit:" + phoneNum;
// SET key value EX 60 NX
isExists = redis.set(key,1,"EX 60","NX");
if(isExists != null || redis.incr(key) <=5){
//  通过
}else{
//  限速
}

list列表类型

Redis中的List其实就是链表(redis 使用双端链表实现的 List),一个List结构可以有序的存储多个字符串,并且是允许元素重复的。
在这里插入图片描述
在这里插入图片描述
常用命令:
在这里插入图片描述

  • LPUSH和RPUSH命令分别用于将元素推入列表的左端和右端;LPOP和RPOP命令分别用于从列表的左端和右端弹出元素,也就是删除元素;
  • 其中对于LRANGE命令来说,使用0位范围的起始索引,-1为范围的结束索引,可以取出列表包含元素的所有元素

set集合类型

  • Redis的集合和列表都可以存储多个字符串,他们的不同支持在于,列表可以存储多个相同的字符串,而集合通过使用散列表来保证自己存储的每个字符串都是各不相同的。
  • Redis的集合使用的是无序的方式存储元素,所以不可以像List列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。
    在这里插入图片描述
    常用命令
    在这里插入图片描述
    交集、并集、差集的计算
    在这里插入图片描述

hash散列类型

Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字执行自增操作或者是自减操作。
在这里插入图片描述
在这里插入图片描述
Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题

常用命令
在这里插入图片描述
添加和删除键值对的命令、获取所有键值对的命令、以及对键值对的值进行自增和自减操作的命令
在这里插入图片描述

//设置值
hset key field value

//获取值
hget key field

//删除field
hdel key field [field ...]

//计算field个数
hlen key

//批量设置或获取field-value
hmset key field value [field value ...]
hmget key field [field ...]

//判断field是否存在
hexists key field

//获取所有field
hkeys key

//获取所有value
hvals key

//获取所有的field-value
hgetall key

//以某种形式自增
hincrby key field
hincrbyfloat key field

//计算value的字符串长度
hstrlen key field

zset有序集合类型

  • 有序集合和散列一样,用于存储键值对;有序集合的键被称为成员member,每一个成员都是独一无二的;而有序集合的值被称为分值score,分值必须是浮点数
  • 有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排序来访问元素的结构。

一个有序集合类型的实例,zset-key是一个包含两个元素的有序集合键:
在这里插入图片描述
常用命令
在这里插入图片描述

redis的底层数据结构参考

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo
 # 格式化输出
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo

参考资料

  1. https://itbilu.com/database/redis/4JoBoVuKb.html
  2. https://blog.csdn.net/xlgen157387/article/details/60958657
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值