• Nosql的redis概述及基本操作


    关系数据库与非关系型数据库概述

    关系型数据库

    关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
    SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
    主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
    以上数据库在使用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,
    如果数据与表结构不匹配就会存储失败。

    非关系型数据库

    NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
    除了主流的关系型数据库外的数据库,都认为是非关系型。
    不需要预先建库建表定义数据存储表结构每条记录可以有不同的数据类型和字段个数
    (比如微信群聊里的文字、图片、视频、音乐等)。
    主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached 等。

    关系型数据库和非关系型数据库区别

    1、数据的存储方式不同
    关系型和非关系型数据库的主要差异是数据存储的方式
    关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

    非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起
    2、扩展方式不同
    SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。

    NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,
    NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
    3、对事务性的支持不同
    如果数据操作需要高事务性或者复杂数据查询需要控制执行计划
    那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。
    SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

    NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,
    所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

    非关系型数据库产生背景

    可用于应对Web2.0(交互)纯动态网站类型的三高问题。
    (1)对数据库高并发读写需求
    (2)对海量数据高效存储与访问需求
    (3)对数据库高可扩展性与高可用性需求

    小结

    关系数据库

    • 1、安全性高(持久化)
    • 2、事务处理能力强
    • 3、任务控制能力强
    • 4、可以做日志备份、恢复、容灾的能力更强一点。

    数据库-->表-->记录行(row)、数据字段(column)-->存储数据

    非关系数据库

    • 1、数据保存在缓存中,利于读取速度/查询数据
    • 2、架构中位置灵活
    • 3、分布式、扩展性高

    非关系型数据库:数据库-->集合(collection)-->键值对(key-value)
    不需要手动建数据库和集合(表)。

    Redis简介

    Redis(远程字典服务器)是一个开源的,使用c语言编写的NoSQL数据库。
    基于内存运行,支持持久化(数据恢复)。采用的就是key-value(键值对)的存储形式。
    目前在分布式架构中是非常重要的一环。

    redis服务器程序是一个单进程模型,也就是说在一台服务器上可以启动多个redis
    (注意端口号不能冲突)
    redis的实际处理速度是完全依靠主进程的执行效率。
    服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降。
    部署了多个redis进程,虽然能提高redis的并发处理能力,但会给服务器的cpu带来很大的压力。
    一台服务器一般部署3个redis进程。
    (根据情况来看,高并发要部署多个。一般的情况,单进程足够)

    Redis的优点
    1、具有极高的读写速度,数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
    2、支持丰富的数据类型,支持 key-value、Strings、Lists、Hashes、Sets等数据类型操作。
    3、支持数据的持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可以实现备份。
    4、原子性,Redis所有操作都是原子性的。
    5、支持主从模式,即master-slave模式。

    redis为什么这么快?
    1、redis是纯内存结构,避免了磁盘I/O的耗时。
    2、核心模块是一个单进程,减少了线程切换和回收线程资源的时间。
    3、I/O的多路复用机制。每一个执行线路都可以同时执行读和写。高并发的效率大大提高。
    特殊说明:redis的读写命令,仍然是单进程处理。

    Redis安装部署

    1. systemctl stop firewalld
    2. setenforce 0
    3. yum install -y gcc gcc-c++ make
    4. cd /opt
    5. --拖入redis压缩包--
    6. tar zxvf redis-5.0.7.tar.gz -C /opt/
    7. cd redis-5.0.7/
    8. make -j 4
    9. make PREFIX=/usr/local/redis install
    10. cd utils
    11. ./install_server.sh
    12. #一直回车
    13. Please select the redis executable path [] /usr/local/redis/bin/redis-server
    14. #需要手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入
    15. ln -s /usr/local/redis/bin/* /usr/local/bin/
    16. ss -antp | grep redis
    17. 修改配置文件
    18. vim /etc/redis/6379.conf
    19. --70行添加监听的主机地址--
    20. bind 127.0.0.1 20.0.0.91
    21. --93行Redis默认的监听端口--
    22. port 6379
    23. --137行启用守护进程(后台运行)--
    24. daemonize yes
    25. --159行指定PID文件--
    26. pidfile /var/run/redis_6379.pid
    27. --167行日志级别--
    28. loglevel notice
    29. --172行指定日志文件--
    30. logfile /var/log/redis_6379.log
    31. /etc/init.d/redis_6379 restart
    32. ss -antp| grep redis

    Redis命令工具

    redis-server:用于启动 Redis 的工具
    redis-benchmark:用于检测 Redis 在本机的运行效率
    redis-check-aof:修复 AOF 持久化文件
    redis-check-rdb:修复 RDB 持久化文件
    redis-cli:Redis 命令行工具

    redis-cli命令行工具

    1. 语法:redis-cli -h host -p port -a password
    2. -h:指定远程主机
    3. -p:指定 Redis 服务的端口号
    4. -a:指定密码,未设置数据库密码可以省略-a 选项
    5. 若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的 Redis 数据库
    6. redis-cli -h 20.0.0.91 -p 6379 -a 123456

    redis-benchmark测试工具

    1. redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。
    2. 基本的测试语法:redis-benchmark [选项] [选项值]。
    3. -h :指定服务器主机名。
    4. -p :指定服务器端口。
    5. -c :指定并发连接数。
    6. -n :指定请求数。
    1. #向IP地址为20.0.0.91、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
    2. redis-benchmark -h 20.0.0.91 -p 6379 -c 100 -n 100000
    3. #测试存取大小为100字节的数据包的性能
    4. redis-benchmark -h 20.0.0.91 -p 6379 -q -d 100
    5. #测试本机上Redis服务在进行set与lpush操作时的性能
    6. redis-benchmark -t set,lpush -n 100000 -q

    Redis数据库常用命令及数据类型

    基础数据类型

    string字符串
    list列表,双向链表
    hash散列,键值对集合
    set集合,不重复
    sorted set,也可以称为Zset有序集合

    1.String数据类型

    keys *展示所有键名

    set存放数据

    1. 格式:
    2. set key value

    #set操作可覆盖原有值
    

    get获取数据

    1. 格式:
    2. get key

    keys结合*、?查看键值列表

    exists查看键名是否存在

    del删除键

    type查看键的类型

    append追加键值

    1. 格式:
    2. append key value
    3. 追加键值,并返回追加后的长度(若键不存在,则相当于创建)

    strlen查看键值长度

    incr自增1

    decr自减1

    setex设置指定key的过期时间

    expire设置已有key的指定时间

    mset批量存放及mget批量获取

    flushall删除redis中所有数据

    2.list数据类型

    列表,但是列表中的元素还是string类型,按照插入顺序排序,在列表的头部或尾部添加元素

    lpush左插入列表元素(反向排列)

    1. 格式:
    2. LPUSH key value [value …]

    lpushx在头部插入元素值

    1. 格式:
    2. lpush key value
    3. #键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

    rpush右插入列表元素(正向排列)

    rpushx在尾部插入元素值

    lrange获取列表元素

    1. 格式:
    2. lrange key start stop
    3. #取从位置索引start到位置索引stop的所有元素(所以以0开始)

    lpop移除列表第一个元素

    rpop移除列表最后一个元素

    llen获取列表长度

     lindex获取指定索引元素

    lset指定索引位将元素设为新值

    linsert在元素前\后插入新元素

    3.Hash数据类型

    hash用于存储对象。可以采用这样的命名方式(hash格式):对象类别和ID构成键名,
    使用字段表示对象的属性而字段值则存储属性值。
    如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间

    每一个Hash可以存储4294967295个键值对。
    对一个键进行多字段存储,节省内存,使用hash方式.

    hset给键设置字段和值

    hmset给键同时设置多个字段和值

    hget获取键中字段的值

    hmget同时获取键中多个字段的值

    hdel删除键中的字段

    hgetall获取键中所有字段及其值

    hkeys获取键中所有字段

    hvals获取键中所有字段的值

    4.set数据类型

    无序集合,元素类型为string类型,元素具有唯一性, 不允许存在重复的成员
    多个集合类型之间可以进行并集、交集和差集运算。
    可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。

    sadd插入数据

    smembers查看数据

    sismember查看元素是否存在

    srandmember随机返回某一元素

    spop随机移除某一元素

    srem指定移除元素

    smove移动元素至其他键

    5.有序集合

    有序集合,元素类型为String,元素具有唯一性, 不能重复。
    每个元素都会关联–个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

    zadd添加成员

    zrange获取键中成员

    zrank获取键中成员索引位置

    zcard获取键中成员数量

    zcount指定条件统计成员

    zrem删除成员

    zscore查看权重

     dbsize查看当前库中键的数量

    6.其他相关操作

     rename修改键名

    select切换库

    redis有自动创建好的16个库(序号0-15),互相独立,互补干扰,默认库序号为0

    move移动键到其他库

    config设置密码

    auth在内声明密码

    -a在外声明密码

    flushdb删除当前库数据

    flushall删除所有库数据

  • 相关阅读:
    Vue之Jwt的运用(一起探索JWT在Vue中的用途吧)
    移动端表格分页uni-app
    解决Avalonia 11.X版本的中文字体问题
    一个功能简单的图片工具类
    第二章 进程与线程 十九、死锁的概念
    2.1背景位置——精确单位
    HTB-Explore
    jeecgBoot 路由配置和自定义路由配置
    简化javabean开发-->Lombok
    37岁更要坚定,竞争从阿里的Java高并发操作手册开始
  • 原文地址:https://blog.csdn.net/pupcarrot/article/details/134505870