欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

redis必会

程序员文章站 2023-11-18 21:14:34
1.NosqL 非关系型数据库,里面包含Redis和MondoDB2.为什么会用到关系型数据库?因为当数据量太多,访问人数过多的时候,在访问关系型数据库时会到硬盘里进行读写过多 这样就会导致访问速度很慢,服务器压力很大。3.这个时候,我们就可以使用非关系型数据库,它相当于一个缓存区, 把一些经常用的 ......

1.nosql
非关系型数据库,里面包含redis和mondodb
2.为什么会用到关系型数据库?因为当数据量太多,访问人数过多的时候,在访问关系型数据库时会到硬盘里进行读写过多
这样就会导致访问速度很慢,服务器压力很大。
3.这个时候,我们就可以使用非关系型数据库,它相当于一个缓存区,
把一些经常用的数据放到缓存区里,当用户使用时直接到缓存区中去读取,缓存区找不到再去mysql中拿。
比如12306首页、天猫0点抢购,会把一本分数据放到缓存区里
4.
列表[] ----->支持增删改查,数据类型多样--顺序表
元组() ----->不支持增删改查,只能读
集合{} ----->支持增删改查,元素不重复
字典{} ------>以键值对存储,支持增删改查
面试题:对列表进行去重,可以先将其先转换成集合,在转换回去
a= [1,1,2,2,3,3,]
b = set(a)
a = list(b)

5.redis 是以健命令来进行增删改查的。就根据键来找值,键值对的nosql,即一个健对应一个值,键的类型永远都是字符串,
这个值可以是字符串哈希列表等数据类型。
1)建命令
* keys+正则 查找当下存在的健
* exists key... 判断建是否存在,如果存在返回1,不存在返回0
* type key 查看健对应value的类型
* del key 会将该建以及对应的值都删除
* expire key +seconds 设置时间
* ttl key 查看建存在的时间
2)string
* 最基本的数据类型,最大存储521mb,可以存储二进制的任何数据,图片、数字、系列化对象
* set key value 设置一个键值对
* setes key seconds value 设置键值及其过期时间,以s为单位
* mset key value key value 设置多个键值
* get key 通过健获取值
* mget key 获取多个值
* append key value 追加一个值
* strlen key 查看长度
3)hash
* 用于存储对象,对象的格式是键值对(可以理解为存进去一个字典)
* hset key field value 设置单个属性
* hmset key field value key field value 设置多个
* hget key field 获取 该建的属性对应的值 获取多个hmget
* hgetall key 获取该健存储的所有属性所有值。
4)list
* 用与存储一个列表,列表中元素是string,按照插入顺序排序
* lpush key value value 在该健头部添加
* rpush key value value 在改建尾部添加
* linsert key before|after pivot value 在一个元素的左面或者右边添加一个元素,pivot表示索引
* lpop key 从左侧拿并删除
* rpop key 从右侧拿并删除
* lrange key start stop 从列表中按照索引值遍历出响应元素 并不删除
* ltrim key field 裁剪
5)set 无序集合、与列表类似、元素string类型、元素唯一不重复
* sadd key member member 添加元素
* smembers key 获取元素
* scard key 返回元素的个数
* sinter key1 key2 .. 求多个集合的交集
* sdiff key1 key2.. 求多个集合的差集
* sunion key1 key2 .. 求多个集合的合集
* sismember key member 判断一个元素是否在集合中
5)zset ——> sorted set 与set类似,但是是有序,通过score表示权重,根据权重来将元素排序
* zadd key score member score1 member1...
* zrange key start stop 获取有序集合的元素
* zcard 返回元素个数
* zscore key member 查看该元素的权重

6.发布订阅设计模式
设计模式:redis支持消息的发布与订阅,不需要进行主动请求,自动进行信息更新。
客户端订阅服务端,服务端有新消息,不需要客户端请求,直接发过去,长连接。


7.利用redis搭建主从集群,可以实现备份功能
只要改配置文件即可,更改配置文件bind
将一个bind更改为自己ip作为主
另一加slave ip 作为从,可以将主的数据存储备份
特点:
master/slave 角色
master/slave 数据相同
降低 master 读压力在转交从库
问题:
无法保证高可用
没有解决 master 写的压力

8.redis更容易搭建集群,redis可以登陆完善

9.使用过redis做异步队列么,你是怎么用的?有什么缺点?
一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。
缺点:
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。
能不能生产一次消费多次呢?----发布订阅模式
使用pub/sub主题订阅者模式,可以实现1:n的消息队列。

10.使用过redis分布式锁么,它是怎么实现的?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!