zoukankan      html  css  js  c++  java
  • redis必会

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

  • 相关阅读:
    关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
    优化PHP代码的40条建议(转)
    这么晚了!难得今天看了几个小时的JAVA
    WEB开发,路漫漫其修远兮,个人的求索思考
    (转)高效的MySQL分页
    20121108随笔,关于代码严谨性、编写的优雅性
    Ubuntu 12.04LTS 安装PHP扩展pdo_oci.so支持ORACLE数据库
    程序员应该具备的11项基本技能
    Windows下配置使用MemCached
    PHP浮点数比较
  • 原文地址:https://www.cnblogs.com/SutCoderHang/p/9703535.html
Copyright © 2011-2022 走看看