• redis之数据类型


    (一)关系型数据库和非关系型数据库的区别

    1、关系型数据库是一个机构化的数据库,列和行

    (1)列:声明对象
    (2)行:记录对象的属性
    (3)表与表之间是有关联的,使用sql语句来对指定表、库进行增删改查
    (4)在创建表时,是设计好了表的结构,按照表结构来存储数据,数据与表结构不匹配,存储数据会失败
    (5)关系型数据库:库——表——行、列——存储数据

    2、非关系型数据库:nosql(not only sql)

    (1)不需要定义库,也不需要定义表结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)
    (2)redis(key:value)键值对形式存储,每个键之间没有直接关联,库与库之间相互关联
    (3)非关系型数据库:库——集合——键值对(不需要手动的创建库和集合)

    3、区别

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

    (二)redis

    1、非关系型数据库的主要场景

    (1)操作的扩展
    (2)海量数据的处理

    2、redis的主要目的——解决三高问题

    (1)web2.0:交互
    (2)纯动态网站的三高问题
    ①对数据库高并发读写的需求
    ②对海量数据高效存储与访问的需求
    ③对数据库的高扩展性与高可用性的需求

    3、数据库缓存(常见的缓存需求场景)

    ①数据库缓存
    ②web页面缓存
    ③CPU和硬盘之间缓存

    4、redis的相关概念

    (1)redis开源的,使用c语言编写的NQL数据库
    (2)redis:基于内促运行,支持持久化(数据恢复),采用的就是key-value(键值对)的存储方式,目前在分布式架构中,是非常重要的一环

    5、常见架构

    6、redis的工作特点

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

    7、redis的特点

    (1)具有极高的读写速度,数据读取每秒:110000次,写入数据每秒可以执行81000次
    (2)支持丰富的数据类型
    (3)支持持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地(磁盘),也可以实现备份
    (4)原子性,所有的操作都是原子性
    (5)支持主从模式:master—slave模式
    8、面试题:redis为什么这么快?
    (1)redis是纯内存结构,避免磁盘I/O的耗时
    (2)核心模块是一个单进程,减少了线程切换和回收线程的时间
    (3)I/O的多路复用机制,每个执行线路都可以同时执行读和写,高并发的效率大大提高
    *特殊说明:redis的读写任然是单进程处理

    (三)部署redis

    1、安装依赖环境:yum install -y gcc gcc-c++ make

    2、编译

    3、安装:make PREFIX=/usr/local/redis install

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

    4、redis的服务控制命令:/etc/init.d/redis_6379 stop 、start、restart、status

    5、修改配置文件

    (四)redis的命令工具

    redis-server

    直接启动redis,只能启动

    redis-benchmark

    检测redis在本机的运行效率

    -h

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

    -p

    指定服务器的端口号

    -c

    指定并发连接数

    -n

    指定请求数

    redis-cil

    命令行工具

    -h

    指定ip地址

    -p

    指定端口号

    -a

    指定登录密码

    redis-check-aof

    检测AOF文件是否正常

    redis-check-rdb

    检测rdb文件是否正常

    (五)redis的数据类型

    1、如何进入redis:redis-cli -h 20.0.0.41 -p 6379

    (1)直接进入:redis-cli仅限于本地登录,远程登录还是需要指定目标服务器的ip地址

    2、redis的五大数据类型

    (1)string(字符串类型—数字、字符串):redis最基本的类型,最大能存储512MB的数据,可以存储任何数据,数字、文字、图片等等
    (2)list:列表,列表中的元素还是string类型
    (3)hash:用于存储对象,采用hash格式进行操作,占用的磁盘空间很少,一个hash可以存储42亿个键值对
    (4)set(无序集合):元素类型也是string,元素是唯一的,不允许重复,多个集合类型之间可以进行并集、交集和差集运算
    ①应用场景:set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,例如访问微博的用户名,只要把对应名称redis,set集合可以自动保存
    (5)zset(有序集合):元素类型string,元素不能重复,唯一,每个元素都会关联一个double类型(小数点)的分数(score,表示权重),按照通过权重的大小进行排序,元素的权重可以相同
    ①zset应用场景:在线积分的排行榜,可以实时更新用户的分数
    ②zrange命令获取积分,zrank命令通过username获取用户的排行信息等等,按照权重有序排列

    redis的五大数据类型

    1、string(字符串类型):redis最基本的类型,最大能存储512MB的数据,可以存储任何数据,数字、文字、图片等等

    查看键值对类型

    keys *

    模糊查询:

    keys t*(查看任意以t开头的键值)

    keys t??(查看任意以开头后面包含任意两个字符的键值)

    创建键值对

    set test 10

    set test 10(set:创建、直接覆盖)

    设置键值的生命周期(新建键值)

    setex test2 15 yyy

    setex test2 15 yyy

    查看键值对的生命周期:ttl test

    修改已有键值的生命周期:expire test2 30

    查看键值是否存在

    exists test

    exists test

    删除键值对

    (del test)

    del test

    查看对应键的类型

    (type test)

    type test

    append

    (返回当前键的总长度)

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

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

    获取指定键的字符长度

    strlen test

    strlen test

    增减:incr、decr、incrby、decrby(key值必须为整数)

    incr、decr

    自增和自减1

    incr test / decr test

    incrby和decrby

    指定整数增减

    incrby test 5

    decrby test 5

    批量创建多个键值对

    (mset)

    mset test2 10 test3 10

    同时打印多个键的值

    (mget)

    mget test2 test3

    2、list数据类型(列表,列表中的元素还是string类型)

    创建列表

    lpush test1 a b

    创建列表:lpush test1 a b c d

    根据索引下标查看列表中的元素

    lindex test1 2

    lindex test1 2指定某一个索引下标位置

    lrange info 1 2指定范围查看

    正序创建列表

    rpush info 1 2 3 4

    rpush info 1 2 3 4

    往列表中添加元素

    删除列表中第一个元素

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

    lpop info1

    获取列表的长度

    llen info

    修改列表中元素

    lset info 3 5

    在指定位置前进行插入元素

    linsert info before 2 1

    linsert info after 2 1

    3、hash数据类型:用于存储对象,采用hash格式进行操作,占用的磁盘空间很少,一个hash可以存储42亿个键值对

    创建hash键值

    键名+字段名

    hset hafo name aa

    获取键值对的元素:hget hafo name

    查看多个键值

    hmget hafo name sex

    删除键值

    hdel hafo name sex

    一次性设置多个字段

    hmset info2 name 1 sex male tall 188

    hgetall info2查看所有

    hkeys info2:查看所有键、字段

    hvals info2:查看所有键对应的值

    删除键值

    del info

    4、set数据类型(无序集合),元素类型也是string,元素是唯一的,不允许重复,多个集合类型之间可以进行并集、交集和差集运算

    (1)应用场景:set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,例如访问微博的用户名,只要把对应名称redis,set集合可以自动保存

    创建

    sadd myset a b

    查看元素

    smembers myset

    查看合集中的元素是否存在

    sismember myset a

    随机返回一个元素

    srandmember myset

    删除

    随机删除一个元素:spop myset

    指定名称删除:srem myset a d

    5、zset有序集合:元素类型string,元素不能重复,唯一,每个元素都会关联一个double类型(小数点)的分数(score,表示权重),按照通过权重的大小进行排序,元素的权重可以相同

    (1)zset应用场景:在线积分的排行榜,可以实时更新用户的分数

    (2)zrange命令获取积分,zrank命令通过username获取用户的排行信息等等,按照权重有序排列

    创建

    zadd myzset 1 one 2 two 3 three

    查看元素

    查看元素:zrange myzset 0 -1

    查看元素+权重:zrange myzset 0 -1 withscores

    获取位置索引

    zrank myzset one(元素)

    查看成员数量

    zcard myzset

    查看权重范围

    zcount myzset 1 2(1《元素》2)

    删除元素

    zrem myzset three(元素)

    查看元素的权重

    zscore myzset two

    对已有键重命名

    rename hafo haa(值不变)

    补充:set和hset(创建普通类型和hash类型)的选择:一般情况下,如无特殊需求,普通创建即可,若对一个键进行多字段存储,节省内存,使用hash方式

    查看当前库中键的数量

    dbsize

    切换库

    select 0

    redis的库都是创建好的,默认16个,数字排名0-15,美格库之间互相独立,互不干扰,默认是0

    移动库的内容

    move yyy 10

    设置密码

    config set requirepass 123456

    在外声明密码:redis-cli -h 20.0.0.41 -p 6379 -a 123456

    在内声明密码:auth 123456

    清空当前数据库的数据

    flushdb

    清空所有库

    (不能用)

    flushall

  • 相关阅读:
    【VUE实战项目】使用typescript重构项目
    S0003-Mac下iTerm2+zsh+ohmyzsh打造优雅美观终端
    python中词云和中文分词jieba的安装与使用
    Gen4Gen:多概念个性化图像生成的数据驱动革新
    美国财政部制裁俄罗斯洗钱人士打击网络犯罪
    进阶JS-作用域和作用域链
    第七章 解析PyTorch中Hook函数(工具)
    RK3588平台开发系列讲解(Pinctrl篇)Pinctrl设备树介绍
    LeetCode(力扣)63. 不同路径 IIPython
    包管理工具--》yarn的配置及使用
  • 原文地址:https://blog.csdn.net/weixin_48145965/article/details/134512759