经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
redis必会
来源:cnblogs  作者:SutFutureCoder  时间:2018/9/26 17:49:03  对本文有异议

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合成一条指令来用的!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号