美文网首页理事会·自动投稿想法简友广场
Python(二十四)Redis的介绍与使用

Python(二十四)Redis的介绍与使用

作者: Lonelyroots | 来源:发表于2021-11-20 17:32 被阅读0次

    智能AI—自动写网文:
    今天早上写程序查资料的时候,在博客上看到一个非常有趣的东西—自动写网文大师,该项目主要是靠AI模型深度学习(这里的深度学习指的是阅读了100G以上的文章)后自动写网文,程序运行后,一秒十字,且每次重新运行后,得到的小说、故事风格不同,但此程序开发有些问题,因为AI不具备任何网文以外的常识,所以写的内容不是非常贴近现实,而且没有人的真情实感,但文章风格还是值得学习(毕竟前无古人后无来者),总的来说看完100G的文章,呃...感觉还是像个小白吧!不过随着开发代码的修改与常识方面阅读量的提升,我相信该AI模型水平也会有所提高吧!

    AI练习—自由创作

    针对这个模型我发表一下个人看法:这种项目的开发还是觉得用来娱乐比较好,想写网文却没有好的想法时也可以瞅瞅,单单留下来自己欣赏阅读还是可以的。

    再过两三个月我的Python系列就要迈入人工智能方向了,到时再与大家深入探讨。接下来说说今天的内容,非关系型数据库Redis。

    1. NoSQL和Redis的简介:

    1.1. NoSQL:

    说到 Redis 就不得不说到NoSQL,NoSQL-Not Only SQL,指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,NoSQL是web2.0时代海量数据催生的产物。

    1.2. NoSQL的三个特点:

    1、不支持SQL语法:
    NoSQL的世界中没有一种通用的语法,每种NoSQL数据库都有自己的语法,以及擅长的业务场景;
    2、读写性能高:
    NoSQL数据库存在于内存当中,都具有非常高的读写性能,尤其在海量数据下,它的表现非常优秀;
    3、灵活的数据模型
    NoSQL的存储方式十分灵活,存储方式可以是JSON文档,键值对(Key Value)或者其他方式。

    1.3. Redis是NoSQL的一种:

    Redis全称:Remote Dictionary Sever(远程字典服务器)的缩写,以宇典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高。

    1.4. Redis的特点有三:

    1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
    2、Redis不仅仅支持简单的key-value类型的数据,同时还把value分为list,set,zset,hash,string等数据结构存储;
    3、因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,提高效率。

    2. Redis基本使用

    2.1. 启动和关闭

    2.1.1. 启动:

    redis-server:启动redis服务器

    开启服务

    2.1.2. 关闭

    redis-cli shutdown可以保存数据,若强行停止则会丢失数据。

    2.1.3. 多数据库

    Redis默认支持16个数据库,以从0开始的递增数字命名。
    选择使用数据库8:select 8,默认是使用数据库0,若超出范围则会报错。

    2.1.4. 命令行客户端

    方法一:将命令作为redis-cli的参数执行
    redis-cli -h 127.0.0.1 -p 6379
    redis-cli ping
    方法二:进入交互模式
    redis-cli

    3. Redis基础命令

    设置一个新的键值对:set num 1(set key value)
    设置多个新的键值对:mset num1 111 num2 222 num3 333(mset key1 value1 key2 value2...)
    获取对应的所有的键:keys *
    返回单个key对应的value值,没有则返回nil,表示空:get num(get key)
    返回多个key对应的value值,没有则返回nil,表示空:mget num1 num2 num3(mget key1 key2 key3)


    获得符合规则的键:
    keys num?:查询num后面任意加一个字符的键
    keys num\?:查询num?键。\表示转义

    keys num[1-2]:查询num后跟字符1到2的键

    exists num4:判断键是否存在,不存在则返回0,存在则返回1

    rename num? num4:将num?键名修改为num4

    expire num4 1:1秒后删除键。
    expire num 300:300秒后删除键。
    ttl num:查看待删除时间,-1表示永久,-2表示不存在该键。
    persist num可以将num键重新变为永久。1表示成功,0表示失败。
    set yzm 123987 ex 300:创建一个值为123987的yzm键,待删除时间为300秒。

    type num:num键类型

    del num:删除yzm键

    因为del无法使用通配符,所以要想批量删除满足规则的内容,需要退出redis,结合linux的管道符和xargs来删除满足规则的内容。
    exit:关闭redis。
    redis-cli keys 'num?' | xargs redis-cli del:在linux界面删除redis中满足规则num?的数据。

    flushdb:清除该数据库0中的数据。
    flushall:清楚所有数据。

    4. Redis数据类型:

    4.1. 字符串:

    与基本命令操作相同
    set num 123:设置num键值为123


    append num 4:添加字符4。
    get num:查看num键的值。
    incr num当num键的值为纯数字时,可以加1。
    decr num当num键的值为纯数字时,可以加1。
    incrby num 10当num键的值为纯数字时,可以加10。
    decrby num 10当num键的值为纯数字时,可以减10。

    append num abcd:当num键的值不只有数字时,加10会报错。

    4.2. 列表:

    lpush myli 3 4 5:左边添加(栈 先进后出)。
    rpush myli 2 1:右边添加(队列 先进先出)。
    llen myli:获取列表长度。
    lindex myli 0:查看索引0位置元素。
    lindex myli 1:查看索引1位置元素。
    lindex myli 2:查看索引2位置元素。
    lrange myli 0 -1:获取列表片段从0到﹣1。
    lrange myli 0 4:获取列表片段从0到4,与Python不同,这里是闭区间,而不是半开半闭区间。


    lpop myli:删除最左边元素,并返回。
    rpop myli:删除最右边元素,并返回。
    lrange myli 0 4:获取列表片段从0到4。
    lpush myli a a a a:左边添加(栈 先进后出)。
    rpush myli a a a a:右边添加(队列 先进先出)。
    lrange myli 0 -1:获取列表片段从0到﹣1。

    删除格式:lrem key count value
    lrem myli -2 a:当count小于0时,从列表右边开始删除2个为a的数据。
    lrem myli 2 a:当count大于0时,从列表左边开始删除2个为a的数据。
    lrem myli 4 a:当count等于0时,删除所有值为a的数据。

    4.3. 哈希类型:

    Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多232-1个字段。
    单个:
    hset mr name moran:添加一个用户mr,设置名字为moran。
    hget mr name:获取mr的名字。


    多个:
    hmset mr age 18 height 180:设置mr键,年龄为18,身高为180。

    hmget mr name age height:获取mr键的名字、年龄、身高。

    hkeys mr:获取mr用户的所有键。
    hvals mr:获取mr用户的所有值。

    hgetall mr:获取mr用户的所有键值对。
    hlen mr:获取mr用户的键值对长度。

    hexists mr size:查看mr用户是否存在键size。
    hexists mr name:查看mr用户是否存在键name。
    存在返回1,不存在返回0。

    hsetnx mr sex abcd:不存在添加,存在啥也不做。

    hincrby bd age 9:给bd用户增加年龄值为9。
    hincrby bd age -5:给bd用户增加年龄值为-5,及减少年龄。
    hdel bd age:删除bd用户的age键。

    hdel mr sex height:删除mr用户的sex、height键。

    4.4. 集合:

    sadd se 1 1 2 2 3 3 4 4 5 a b c:添加元素1 1 2 2 3 3 4 4 5 a b c至se里。
    smembers se:查看集合se的所有元素。


    srem se 5:删除集合se里的元素5。
    smembers se:查看集合se的所有元素。
    spop se 2:随机删除两个元素。

    sismember se 1:查看1元素是否在集合se内,在,返回1。
    sismember se 0:查看0元素是否在集合se内,不在,返回0。
    scard se:查看se里的元素长度。
    sadd b c 1 2:添加元素c 1 2至b里。
    del b:删除b元素
    keys *:查看数据库0中有多少键。(基本命令)

    格式:srandmember key count,count为正,返回count个不重复数,count为负,出现重复数据。
    srandmember se 3:从se中随机获取3个元素,和之前不重复。
    srandmember se -3:从se中随机获取3个元素,和之前有重复。

    交集:
    sinter se1 se2:查看se1和se2的交集。
    sinterstore se3 se1 se2:将se1和se2的交集存储在se3中。

    并集:
    sunion se3 se1 se2:查看se1和se2的并集。
    sunionstore se3 se1 se2:将se1和se2的并集存储在se3中。

    差集:
    sdiff se1 se2:查看se1与se2的se1差集。
    sdiff se2 se1:查看se2与se1的se2差集。
    sdiffstore se4 se1 se2:将se1与se2的se1差集存储在se4中。

    4.5. 有序集合(zset):

    有序集合:
    在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是它们的分数却可以相同。

    特点和差别:
    (1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。
    (2)有序集合类型是使用散列表和跳跃表(Skiplist)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。
    (3)列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)。
    (4)有序集合要比列表类型更耗费内存。有序集合类型算得上是Redis的5种数据类型中最高级的类型了,在学习时可以与列表类型和集合类型对照理解.

    zadd math 100 mr 90 wz 80 ay 70 yg 60 zl 18 bd:添加值100给键mr、值90给键wz、值80给键ay、值70给键yg、值60给键zl、值18给键bd至有序集合math里。
    zcard math:查看有序集合math里的数据个数。
    zscore math ay:获取math里的ay分数。


    zrange math 0 -1:获取math里的所有值,并按照从低到高排序,不展示分数。
    zrange math 0 -1 withscores:获取math里的所有值,并按照从低到高排序,展示分数。
    zrevrange math 0 -1 withscores:获取math里的所有值,并按照从高到低排序,展示分数。

    zrem math zl:删除math里的zl。
    zrangebyscore math 60 100:筛选出math里从60到100的值。

    zrangebyscore math (60 100 withscores:筛选出math里从60开区间到100闭区间的值,展示分数。
    zrangebyscore math (60 (100 withscores:筛选出math里从60开区间到100开区间的值,展示分数。
    zrangebyscore math 60 100 withscores limit 1 2:筛选出math里从60闭区间到100闭区间的值,展示分数,limit 1 2表示只获取索引1到2。

    格式:zcount key min max:获取从min闭到max闭的有序集合key长度。
    zcount math 60 100:获取从60闭到100闭的有序集合math长度。
    zincrby math 30 bd:给math里的bd加30分。

    zincrby math -2 mr:给math里的mr加-2分。
    zremrangebyrank math 0 1:按照排名范围,删除math里的两个元素即0到1。
    zremrangebyscore math 80 90:按照分数范围,删除math里的两个元素即80到90分。

    交集:zinterstore zse3 2 zse1 zse2:将zse1和zse2做交集的数据存储到zse3中,2表示两个集合,若3个集合做交集,则写3。
    并集:zunionstore zse4 2 zse1 zse2:将zse1和zse2做并集的数据存储到zse4中,2表示两个集合,若3个集合做交集,则写3。

    文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

    Editor:Lonelyroots

    相关文章

      网友评论

        本文标题:Python(二十四)Redis的介绍与使用

        本文链接:https://www.haomeiwen.com/subject/szudtrtx.html