• 初识Redis


    前言

    Redis:非关系型数据库,缓存型数据库。

    关系型数据库

    关系型是一个结构化的数据库,他的记录方式是行和列(列声明对象的,行记录对象的属性)   

    表与表之间是有关联的,使用sql语句,来对指定的表,库,进行增删改查

    在创建表时,我们是设计好了表的结构,按照表的结构来存储数据,数据与表结构不匹配,存储数据库,会失败

    非关系型数据库:

    nosql   not only sql

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

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

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

    非关系型数据库得主要场景:

    1. 操作的扩展性
    2. 海量的数据处理

    Web2.0:核心,交互

    纯动态网站的三高问题:

    1. 对数据库高并发读写的需求
    2. 对海量数据提高效率存储与访问的需求
    3. 对数据的高可扩展性与高可用性的需求

    常见的缓存需求场景:

    数据库缓存

    Web页面缓存

    CPU和硬盘之间的缓存

    关系型数据库:

    库-----表----------行, 列------------>存储数据

    非关系型数数据库:

    库------集合------>键值对

    他不需要手动的创建库和集合

    Redis是什么:

    开源的,使用C语言编写的NQL数据库

    Redis:基于内存运行的,支持持久化(数据恢复),采用的就是key-values(键值对)的存储形式,目前在分布式架构中是非常重要的一环

    生产时常见的架构:

    Redis的工作特点:

    Redis服务器程序,是一个单进程模式,既一个主进程工作,也就是说在一台服务器上可以启动多个Redis(端口号不要冲突),Redis的实际处理速度是完全依靠主进程的执行效率,服务器只部署了一个Redis进程,多个客户端访问,可能会导致Redis处理能力下降

    如果部署了多个Redis进程,虽然提高了Redis并发处理能力,但是会给服务器的CPU很大的压力

    一台服务器,一般部署3个Redis进程(根据情况来看,高并发,要部署多个,一般的情况,单进程够用)

    Redis的特点:

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

    Redis快的原有是什么

    1. Redis是纯内存结构,避免了磁盘的i/o的耗时
    2. 核心模块是什么单进程,减少了线程切换和回收线程的时间
    3. I/o的多路复用机制,每一个执行线路都可以同时执行读和写,高并发的效率大大提高

    *特殊说明*:Redis的读写仍然是单进程处理。

    安装Redis

    依赖环境:

    yum install -y gcc gcc-c++ make

    编译:

    安装:

    make PREFIX=/usr/local/redis install

    ./install_server.sh

    /usr/local/redis/bin/redis-server

    Selected config:

    Port           : 6379 #默认侦听端口为6379

    Config file    : /etc/redis/6379.conf #配置文件路径

    Log file       : /var/log/redis_6379.log #日志文件路径

    Data dir       : /var/lib/redis/6379 #数据文件路径

    Executable     : /usr/local/redis/bin/redis-server #可执行文件路径

    Cli Executable : /usr/local/bin/redis-cli #客户端命令工具

    #把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

    ln -s /usr/local/redis/bin/* /usr/local/bin/

    Redis的服务控制的命令:

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

    修改配置文件

    vim /etc/redis/6379.conf

    70行添加本地IP地址

    137行

    167行

    重启

    Redis的命令工具:

    Redis-server:直接启动Redis,只能启动

    Redis-benchmark:检测Redis在本机的运行效率

    Reid-cil:命令行工具

    Reid-check-aof:检测AOF文件是否正常

    Redis-check-rdb:检测rdb文件是否正常

    Redis-benchmark:是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

    基本的测试语法:redis-benchmark [选项] [选项值]。

    -h 指定服务器的主机名IP地址

    -p 指定服务器的端口号

    -c 指定并发连接数

    -n 指定请求数

    -q 强制退出

    -d 数据包数

    #向 IP 地址为 20.0.0.51、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能

    redis-benchmark -h 20.0.0.51 -p 6379 -c 100 -n 100000

    #测试存取大小为 100 字节的数据包的性能

    redis-benchmark -h 20.0.0.51 -p 6379 -q -d 100

    #测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能

    redis-benchmark -t set,lpush -n 100000 -q

    Redis的数据类型:

    1. 如何进入Redis

    redis-cli -h 20.0.0.52 -p 6379 即可登录本地,还可以远程登录

    -h 指定IP地址

    -p 指定端口号

    -a 指定登录密码

    redis-cli 直接使用,仅限于本地登录,远程登录还需指定IP地址

    Redis 数据库常用命令

    set:存放数据,命令格式为 set key value

    get:获取数据,命令格式为 get key

    # keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。

    127.0.0.1:6379> set k1 1

    127.0.0.1:6379> set k2 2

    127.0.0.1:6379> set k3 3

    127.0.0.1:6379> set v1 4

    127.0.0.1:6379> set v5 5

    127.0.0.1:6379> set v22 5

    127.0.0.1:6379> KEYS v* #查看当前数据库中以 v 开头的数据

    127.0.0.1:6379> KEYS v? #查看当前数据库中以 v 开头后面包含任意一位的数据

    127.0.0.1:6379> KEYS v?? #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据

    # exists 命令可以判断键值是否存在。

    127.0.0.1:6379> exists teacher #判断 teacher 键是否存在

    (integer) 1 # 1 表示 teacher 键是存在

    127.0.0.1:6379> exists tea

    (integer) 0 # 0 表示 tea 键不存在

    # del 命令可以删除当前数据库的指定 key。

    127.0.0.1:6379> keys *

    127.0.0.1:6379> del v5

    127.0.0.1:6379> get v5

    Redis的五大数据类型:

    一.string(字符串):

    也是Redis最基本的类型,最大能存储512MB的数据,可以存储任何数据,比方说数字,文字,图片,等等

    PS:APPEND

    APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

    exists home             

    #判断该键是否存在,存在返回1,否则返回0

    append home "cat"     

    #该键并不存在,因此append命令返回当前Value的长度

    append home "dog"    

    #该键已经存在,因此返回追加后Value的长度

    get home               

    #通过get命令获取该键,以判断append的结果

    如和查看键值对的类型

    type test

    Append:APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

    (若键不存在,则相当于创建)

    补充:

    INCR/DECR/INCRBY/DECRBY:

    INCR key:key值递增加1(key值必须为整数)

    DECR key:key值递减1(key值必须为整数)

    Set 可以直接覆盖,自增1和自减1

    指定增加和减少

    (integer) -2 表示已过期

    (integer) -1 表示永不过期

    GETSET:

    GETSET key value:获取key值并返回,同时给key设置新值

    SETEX:

    setex key seconds value:设置指定key的过期时间为seconds

    #设置缓存过期时间,3600秒

    EXPIRE mycount 3600

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

    EXPIRE wang 30

    (integer) -2 表示已过期

    (integer) -1 表示永不过期

    SETNX key value:不存在键的话执行set操作,存在的话不执行

    同时打印多个键值对

    MSET/MGET/MSETNX:

    MSET key value [key value …]:批量设置键-值对

    MGET key [key …]:批量获取键值对

    获取指定长度的字符

    二.list数据类型

    概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素

    LPUSH key value [value …]在头部(左侧)依次插入列表元素

    LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

    LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)

    创建

    查看(倒序)

    #取从位置0开始到位置2结束的3个元素。

    #取链表中的全部元素,其中0表示第一个元素,-1表示最后一一个元素。

    指定查看

    正续查看

    RPUSH wang4  1 2 3 4 5  #正向排列

    查看

    指定查看

    插入数据,不同的插入方法对应不同的

    删除lpop#移除并返回mykey键的第一个元素,即从右往左第一个

    获取表的元素LLEN

    指定索引下标替换LSET

    根据值指定位置在前面添加数据

    三.Hash类型(散列类型)

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

    创建

    #给键值为myhash的键设置字段为field1,值为zhang。

     #获取键值为myhash,字段为field1的值。

    #myhash键中不存在field2字段,因此返回nil.

    查看

    如何删除元素

    查询全部

    #hkeys命令仅获取myhash键中所有字段的名字

     #hvals命令仅获取myhash键中所有字段的值。

    删除

    四、set数据类型(无序集合)

    Set数据类型(无序集合)元素的类型也是string,元素是唯一的,不允许重复,多个集合可以进行并集,交集和差集运算,set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,访问微博的用户名,只要把对应名称Redis set集合可以自动保存唯一性,方便下一次访问

    清除所有库的所有内容

    Flushall(慎用)

    创建SADD wang a a c

    查看SMEMBERS wang

    #获取Set集合中元素的数量

    Scard

    查看键值,不允许有重复数据

    随机移除

    SPOP

    指定移除

    SERM

    smove命令

    五、Sorted Set数据类型 (zset、有序集合)

    有序集合(zset):有序集合,元素类型也是string,元素唯一,不能重复

    每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小。进行排序,元素的权重可以相同

    用于一些在线积分的排行榜,可以实时更新用户的分数,可以使用zrange命令回去积分top10的用户,zrank命令通过username来获取用户的排名信息

    权重是1,元素是one,权重可以重复,元素不可用重复

    创建ZADD

    打印所有元素ZRANGE wang 0 -1 withscores

    怎么获取位置索引

    #获取成员one在Sorted-Set中的位置索引值。0表示第一个位置。

    #查看上--条命令是否删除成功

    ZCOUNT myzset 1 4

    表示权重的范围:1<=score<=4

    删除

    查看删除之后的结果

    查看权重

    Set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可

    对一个键进行多字段存储,节省内存,使用hash方式,工作当中set足够

    补充:

    如何set重命名

    如和查看当前库键的数量

    Redis的库,库都是创建好的库,16个库

    数字排名:0-15 每个数据库之间互相独立,互不干扰

    如何切换库

    如何把当前库的内容,移到其他库

    回到默认库

    如何给库创建密码

    可以进Redis,但是进不了库

    如何进库:

    在内申明

    在外声明

    删除库

    总结:

    Redis的特点:读写速度快

    数据类型:

    1. String
    2. List
    3. Hash对一个键进行多字段操作,要用hash,节省内存空间
    4. 无序集合set  元素不能重复 可以用来定义唯一值
    5. 有序集合zset 元素不能重复,权重可以相同,可以用来排名
  • 相关阅读:
    批量在文件名中的特定文字的左边或右边位置添加文字
    JAVA面向对象(OOP)总结----宏观的程序设计
    小程序分包和基础页面创建
    table通过伪类实现 另类自适应
    Feign 和 OpenFeign 的区别???
    微前端 - micro-app 数据通信
    手把手教你设计一个CSDN系统
    redis的应用场景
    四个,Word提高效率小技巧
    安科瑞无线计量模块AEW100指导性技术要求-Susie 周
  • 原文地址:https://blog.csdn.net/wutong0824/article/details/134538212