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

智能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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • 目录: 一、介绍 二、缓存问题 三、Redis内存滥用 四、键命名规范 五、Redis使用场景 六、持久化操作 七...
    小世界的野孩子阅读 303评论 0 1
  • ONSQL NOSQL指的是非关系型数据库,是对不同于传统的关系型数据库的数据库...
    冬风诉阅读 499评论 0 0
  • Redis详细介绍 Redis NoSQL:Not Only SQL,是非关系型数据库; Web2.0对于上万次的...
    Cherry300阅读 712评论 1 3
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,297评论 0 36
  • Redis是什么(来源百度百科) Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的...
    孔垂云阅读 1,040评论 0 6