• Redis非关系型数据库


    非关系型数据库:nosql not only sql
    不需要定义数据库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)
    redis key:values 键值对形式储存。每个键之间没有直接关联,库与库之间相互独立。

    关系型非关系区别

    1、数据的储存方式不同

    关系型数据库:库---------->表----------->行、列------------>存储数据

    非关系型数据库:库--------->集合---------->键值

    2、扩展方向:性能上的提升。关系型数据库靠的是提升本机性能。非关系型关系型数据库可以横向扩展,加入节点服务器的方式提高性能。
    3、对事物的支持性,mysql支持事务。
    关系型数据库:原子性、隔离性、一致性、持久性
    非关系型数据库:也可以支持事务,redise也可以支持事务,但稳定性和处理能力都不如关系型数据库。

    非关系型数据的主要场景: 1、操作的扩展
                                              2、海量数据处理

    非关系型数据库的作用:

    纯动态网站的三高问题:
    1、对数据库高并发读写的需求。
    2、对海量数据高效存储与访问的需求。
    3、对数据库的高扩展性与高可用的需求。

    数据库缓存

    redis的工作特点:
    redis服务器程序是一个单进程模式,即只有一个主进程工作。也就是说在一台服务器上启多个redis(端口号不能冲突)
    redis的实际处理速度是完全依靠主进程的执行效率。

    服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降
    如果部署了多个redis进程,虽然能提高redis的并发处理能力, 但是会给服务器的cpu带来很大的压力。
    一台服务器,一般部署3个redis进程。(更具情况来看,高并发要部署多个。)一般的情况,单进程足够)

    redis的特点:
    1、具有极高的读写速度,数据读取每秒110000次,写入数据每秒81000次写入。
    2、支持丰富的数据类型。
    3、支持持久化。平常的数据保存在内存中,持久化可以写入磁盘中,既可以保存在本地,也可以实现备份。
    4、原子性,所有的操作都是原子性
    5、支持数据主从模式------master slave模式

    redis为什么这么快

    1、redis纯内存结构,避免了磁盘I/O的耗时
    2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
    3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
    ***特殊说明:redis的读写,依旧是单进程处理。

    redis部署

    yum install -y gcc gcc-c++ make
    cd /opt/
    将包拖到opt下
    tar -xf redis-5.0.7.tar.gz
    cd redis-5.0.7/
    make -j 4 
    make PREFIX=/usr/local/redis install
    cd utils/
    ./install_server.sh
    ---第四个回车后---
    /usr/local/redis/bin/redis-server
     
    ln -s /usr/local/redis/bin/* /usr/local/bin/
    vim /etc/redis/6379.conf
    70行 加本机ip

    redis的服务控制命令:

    /etc/init.d/redis_6379 restart
    /etc/init.d/redis_6379 status
    /etc/init.d/redis_6379 stop
    /etc/init.d/redis_6379 start

    查看端口是否启动成功

    ss -antp | grep redis

    redis的命令工具:

    redis-server:直接启动redis,只能启动
    redis-benchmark: 检测redis在本机的运行效率
    redis-cli:命令行工具
    redis-check-aof: 检测AOF文件是否正常
    redis-check-rdb: 检测rdb文件是否正常

    redis-benchmark

    -h指定服务器的主机名 ip地址
    -p指定服务器的端口号
    -c指定并发连接数
    -n指定请求数
    -a指定登陆密码

    进入redis命令
    1、redis-cil -h 192.168.10.80 -p6379
    2、redis-cli 仅限制本地使用,远程访问需要指定ip和端口

    redis的五大数据类型

    1、 string(字符串

    string是redis最基本的类型,最大能存储512MB的数据,可以存储任何数据

    创建    set 键名 键的值

    删除     del 键名

    查看键值对的值    get 键名

    查看所有键值对    keys * 

    模糊查询?(表示单个字符)         *(多个字符)

    查看键名生命周期:ttl 键名(秒)

    APPEND 有则拼接,无则创建输入

                    APPEND 键名 键值

    EXISTS 

    STRLEN 标记长度

            STRLEN 键名

    INCR   自增一        INCR 键名(只针对数字类型)

    DECR  自减一        DECR 键名(只针对数字类型)

    incrby 键值对 数值

    decrby 键值对 数值

    EXPIRE 对已有键值对设置生命周期

    EXPIRE 键值对名 周期时间

    (integer) -1 表示永不过期
    (integer) -2 表示已过期

    新建时声明键值对的声明周期

    setex 键名 生命周期时间 内容

    mset 键名1  值  键名2  值
    mset key1 hello key2 world
    #批量设置键
     
    keys *
    #查看键
     
    mget 键名1 键名2
    mget key1 key2
    #同时打印多个键的值

    2、list数据类型

    正序查看:RPUSH test1 a b c 1 2 3

    倒叙查看:LPUSH test a b c 1 2 3

    #创建列表 后面时内容,但是当中的元素还是string类型

    192.168.10.80:6379> LPUSH test a b c 1 2 3 
    (integer) 6
    192.168.10.80:6379> lrange test 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "c"
    5) "b"
    6) "a"
    192.168.10.80:6379> LINDEX test 0
    "3"
    192.168.10.80:6379> LINDEX test 1
    "2"
    192.168.10.80:6379> RPUSH test1 a b c 1 2 3
    (integer) 6
    192.168.10.80:6379> lrange test1 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "1"
    5) "2"
    6) "3"
    192.168.10.80:6379> LINDEX test 0
    "3"
    192.168.10.80:6379> LINDEX test1 0
    "a"

    192.168.10.80:6379> LPUSH test 1 2 3 4 5 6
    (integer) 6
    192.168.10.80:6379> LINDEX test -1
    "1"
    192.168.10.80:6379> LINDEX test 0
    "6"
    192.168.10.80:6379> LINDEX test 1
    "5"
    192.168.10.80:6379> LINDEX test 2
    "4"
    192.168.10.80:6379> LINDEX test 3
    "3"
    192.168.10.80:6379> LINDEX test 4
    "2"
    192.168.10.80:6379> 

    list操作命令

    lpush quoqi a b c d 12 13
    #创建列表 后面时内容,但是当中的元素还是
     
    lrange 键名 0 -1
    #查看列表中的数据(倒叙)
     
    lindex 键名 0
    #根据索引下标打印数据
     
    lindex 键名 索引号
    #根据索引下标打印数据
     
    rpush 键名 1 2 3 4
    #创建列表正序查看 从右到左 从右-1开始自增
     
    lrange 键名 0 -1
    #正序查看
     
    lrange 键名 1 2
    #指定范围查看
     
    RPUSHX test 值
    #在test其右侧加入一个值
     
    LPUSH test 值
    #在test其左侧加入一个值
     
     
     
    lpop  键名
    lpop guoqi1
    #从左边开始删
     
    lrange guoqi1 0 -1
    #范围查看键值对内部的值
     
    rpop  键名
    rpop guoqi1
    #从右边开始删
     
    lrange guoqi1 0 -1
     
    llen  键名
    llen guoqi1
    #查询列表内的元素
     
    lindex  键名  索引下标
    lindex guoqi1 3
    #指定索引下标查询
     
    lrange guoqi1 0 -1
     
    linsert 键名   before 索引下标范围
    linsert guoqi1 before 3 10
    #在指定位置前插入数据

     

    3、hash类型

            hash类型用于存储对象,采用hash格式来进行操作。占用磁盘少,而且占用一个hash可以占用4294967295个键值对

    创建:HSET 键名 字段 值
    查看:HGET 键名 字段
    创建多个:HSET 键名1 字段1 值2 字段2 值 字段3 值3
    查看多个:HMGET 键名 字段1 字段2
    查看所有字段:HGETALL 键名
    删除:HDEL 键名 字段1 字段2

    192.168.10.80:6379> HSET test tall 150
    (integer) 1
    192.168.10.80:6379> HGET test tall
    "150"
    192.168.10.80:6379> HMSET test age yes sex nan
    OK
    192.168.10.80:6379> HMGET test tall age sex
    1) "150"
    2) "yes"
    3) "nan"
    192.168.10.80:6379> HGETALL test
    1) "tall"
    2) "150"
    3) "age"
    4) "yes"
    5) "sex"
    6) "nan"
    192.168.10.80:6379> HDEL test age
    (integer) 1
    192.168.10.80:6379> HGETALL test
    1) "tall"
    2) "150"
    3) "sex"
    4) "nan"
    192.168.10.80:6379>

    4、set数据类型

            无序集合元素类型也是string,元素是唯一的,不允许重复。多个集合类型可以进行并集。交集和差集运算.
    set 元素类型是唯一的,可以跟踪一些唯一性的数据。只要把对应名称redis,set 可以

    创建:SADD 集合名 
    查看:SMEMBERS 集合名
    随机给出一个元素:SRANDMEMBER 集合名
    随机移除一个元素:SPOP 集合名
    指定移除:SREM 集合名
    
    5、有序集合

            有序集合,元素类型也是string,元素唯一,不能重复,每个元素都会关联一个double (小数点)的分数(score,表示权重)可以通过权重的大小,进行排序。元素的权重可以相同。
    zset:可以应用到在线积分的排行榜,可以实时更新用户的分数。

    创建:
    ZADD 集合名 权重1 元素1  权重2 元素2  权重3 元素3
    ZADD test1 1 one 2 two 3 three
     
    查看+权重:
    ZRANGE 集合名 0 -1 WITHSCORES                   WITHSCORES安照权重来排序
    ZRANGE test1 0 -1 withscores
     
    查看不加权重:
    ZRANGE 集合名 0 -1
    ZRANGE test1 0 -1
     
    获取成员数量:
    ZCARD 集合名
    ZCARD test1
     
    获取成员数量权重范围 
    ZCOUNT 集合名 权重范围
    ZCOUNT test1 2 3
     
    删除集合元素        
    ZREM 集合名 元素
    ZREM test1 three
     
    查看元素权重 
    ZSCORE 集合名 元素
    ZSCORE test1 two

    操作过程

    192.168.10.80:6379> ZADD test1 1 one 2 two 3 three
    (integer) 3
    192.168.10.80:6379> ZRANGE test1 0 -1
    1) "one"
    2) "two"
    3) "three"
    192.168.10.80:6379> ZRANGE test1 0 -1 withscores
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    5) "three"
    6) "3"
    192.168.10.80:6379> ZCARD test1
    (integer) 3
    192.168.10.80:6379> ZCOUNT test1 2 3
    (integer) 2
    192.168.10.80:6379> ZREM test1 three
    (integer) 1
    192.168.10.80:6379> ZRANGE test1 0 -1 withscores
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    192.168.10.80:6379> ZSCORE test1 two
    "2"
    192.168.10.80:6379> 

    查询redis库

    redis的库都是创建好的,有16个库

    数字排名:0-15

    每个数据库之间互相独立,互不干扰

    select [0-15]
    #切换库 
     
    dbsize
    #查看当前库中键的数量
     
    keys *
    查看键
     
     
    move 键名  库的序号
    MOVE test1 1
     
    查看键的类型
    type 键名

    192.168.10.80:6379> KEYS *
    1) "test"
    2) "test1"
    192.168.10.80:6379> KEYS *
    1) "test"
    192.168.10.80:6379> SELECT 1
    OK
    192.168.10.80:6379[1]> KEYS *
    1) "test1"
    192.168.10.80:6379[1]> 

    密码

    设置密码
    config set requirepass 密码
    config set requirepass 123456
     
    在内声明密码
    auth 密码
    auth 123456
     
    在外生声明密码
    redis-cli -h ip -p 6379 -a 密码
    redis-cli -h 192.168.10.80 -p 6379 -a 123456

    面试题:
    rdis为什么这么快?
    1、redis纯内存结构,避免了磁盘I/O的耗时
    2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
    3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
    ***特殊说明:redis的读写,依旧是单进程处理。
     

  • 相关阅读:
    【tomcat、java】
    Linux用一键安装包部署禅道(18.5版本)
    FPGA SPI 驱动程序
    Vue3 之 Vuex - 状态管理
    回顾vmware 补充细节
    商淘云:如何选择开源B2B2C多用户商城系统
    Linux网络-DNS域名解析服务
    兼容PostgreSQL,Google推出全管理型数据库AlloyDB,工作效率翻番
    java项目_第168期ssm二手车交易网站-_计算机毕业设计
    【完整详细】使用Alibaba Cloud Toolkit插件一键部署前后端分离项目
  • 原文地址:https://blog.csdn.net/Lachewuxian/article/details/134520514