Python全栈最全学习之路-Redis数据库

Redis

当然开始之前,你的电脑中需要安装好Redis——————

一、NoSQL和Redis简介

1、NoSQL

1-1、NoSQL-Not Only SQL

NoSQL指的是非关系型数据库,是对不同于传统的关系型数据库的数据库的数据库管理系统的统称,NoSQL是web2.0时代海量数据催生的产物

1-2、特点
1-2-1、不支持SQL语法

NoSQL的世界中没有一种通用的语法,每种NoSQL数据库都有自己的语法,以及擅长的业务场景

1-2-2、读写性能高

NoSQL数据库存在于内存当中,都具有非常高的读写性能,尤其在海量数据下,它的表现非常优秀

1-2-3、灵活的数据模型

NoSQL的存储方式十分灵活,存储方式可以是JSON文档,键值对(key value)或者其他方式

2、Redis

2-1、Redis诞生

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人SalvatoreSanfilippo便开始对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并与2009年开发完成,这个数据库就是Redis,同一年SalvatoreSanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者PieterNoordhuis一起继续着Redis的开发,直到今天。
Redis全称:Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容,使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高

2-2、特点
2-2-1

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载运行使用

2-2-2

Redis不仅仅支持简单的key-value类型的数据,同时还把value分为list,set,zset,hash等数据结构存储

2-2-3

因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,提高效率

二、Redis基本使用

1、启动和关闭

1-1、启动

redis-server

1-2、关闭

redis-cli SHUTDOWN
这样可以保存数据,强行停止会丢失数据

1-3、多数据库

Redis默认支持16个数据库,从0开始的递增数字命名

SELECT 1
SELECT 来选择使用哪个数据库
1-4、命令行客户端

方法一:将命令作为redis-cli的参数执行
在这里插入图片描述
方法二:进入交互模式
在这里插入图片描述

三、基础命令

1、基础命令

1-1、设置键和值

通过SET key values来设置一个新的键值对

SET bar 1
MSET bar1 a bar2 b # 同时设置多个

在这里插入图片描述

1-2、获得符合规则的键名列表

通过KEYS patten来获取key所对应的value

KEYS *
这里的pattern支持glob风格的通配符格式
GET bar # 存在返回对应的value值,没有返回nil,表示空的意思
MGET bar1 bar2 # 同时获得多个

在这里插入图片描述

1-3、判断一个键是否存在

EXISTS key 如果键存在则返回整数类型1,否则返回0

EXISTS bar

在这里插入图片描述

1-4、对键重命名

RENAME key new_key 对键值重新命名

RENAME foo foo1

在这里插入图片描述

符号含义
匹配一个字符
*匹配任意个(包括0个)字符
【】匹配括号间的任一字符,可以使用“-”符号表示一个范围,如a【b-d],可以匹配:ab,ac,ad
\x匹配字符x,用于转义符号,如要匹配“?”就需要使用?
1-5、设置key过期时间

通过EXPIRE key seconds来设置过期时间

SET bar abc
EXPIME bar 10000

在这里插入图片描述
TTL可以查看key还剩余的时间,-1表示永久,-2表示不存在

TTL bar

在这里插入图片描述
让键重新变成永久,成功返回1,否则返回0,表示键不存在或者本事就是永久

PERSIST bar

在这里插入图片描述
通过SET key value EX seconds来设置过期时间

SET bar 123 EX 2000 # 也可以在设置key就顺便设置时间

或者SETEX key seconds value来设置过期时间

SETEX bar 2000 123

在这里插入图片描述

1-6、获取键值的数据类型

使用TYPE key获取键值的数据类型,Redis中有五种数据类型,因此返回也会有五种数据类型

SET foo 1
TYPE foo

在这里插入图片描述

1-7、删除键

DEL key [key…]可以删除一个或多个键,返回值是删除的键的个数

DEL bar

DEL命令的参数不支持通配符,但我们可以结合Linux的管道和xargs命令自己实现删除所有符合规则的键,比如要删除所有以user开头的键,就可以执行:
在这里插入图片描述
在这里插入图片描述
用普通用户的话,记得转为root用户再执行此命令,否则可能会失败。

1-8、清空所有数据

Redis数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据
在这里插入图片描述

四、数据类型

1、字符串类型-string

字符串是Redis的基本数据类型,使用SET生成的键值对,其value就是字符串类型。字符串类型可以存储任何形式的字符串

SET num1
APPEND num2 # 添加字符

在这里插入图片描述
在这里插入图片描述

#如果value的值是数字,还可以进行加减

INCR num # 加1
DECR num # 减1

在这里插入图片描述
#+整数

INCRBY num 10

#-整数

DECRBY num 5

在这里插入图片描述

2、列表-list

2-1、添加元素

#LPUSH 左边添加(栈 先进后出)

LPUSH myli 3 4 5

在这里插入图片描述
#RPUSH 右边添加(队列 先进先出)

RPUSH myli1 2 1

在这里插入图片描述

2-2、获取列表片段
LRANGE myli 0 5
LRANGE myli 0 -1

-1表示最后一个
在这里插入图片描述

2-3、查看指定位置元素
LINDEX myli 3

在这里插入图片描述

2-4、获取列表长度
LLEN myli

在这里插入图片描述

2-5、弹出元素
LPOP myli # 从左边删除元素
RPOP myli # 从右边删除元素

在这里插入图片描述
LREM key count value

LREM myli 2 1 #当count>0时LREM命令会从列表左边开始删除前count个值为value的元素
LREM myli -1 2 #当count<0时LREM命令会从列表右边开始删除前【count】个值为value的元素
LREM myli 0 4 #当count=0是LREM命令会删除所有值为value的元素

在这里插入图片描述
说明:当有列表myli的时候,里面有一个元素x,你想继续往进加元素的话,就是LPUSHRPUSH,不同的对应不同的添加顺序,当使用LPUSH的时候添加三个元素a b c时,查看后的元素顺序为c b a x,当继续使用RPUSH的时候进行添加元素m n时,查看后的元素顺序为c b a x m n
在这里插入图片描述

3、哈希类型-hash

我们现在已经知道Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多232-1个字段。
在这里插入图片描述

3-1、设置和获取

HSET key field value #设置

HSET bd name budong
HSET bd age 18

HGET key field #获取

HGET bd name

在这里插入图片描述
HMSET key field value [field value...]

HMSET ks name kongshan age 18 #设置多个

HMGET key field [field...]

HGET ks name age #获取多个

在这里插入图片描述

HKEYS bd #获取所有keys
HVALS bd #获取所有value

在这里插入图片描述
HGETALL key

HGETALL bd #获取所有key和value
HLEN bd #获取field的个数

在这里插入图片描述

3-2、判断字段是否存在
HEXISTS key field
HEXISTS bd size #判断bd是否存在size,存在返回1,不存在返回0
HSETNX bd size 180 #不存在是添加,存在什么也不做

在这里插入图片描述

3-3、增加数字
HINCRBY key field increment
HINCRBY bd age 2

在这里插入图片描述

3-4、删除字段
HDEL key field [field...] #删除一个或者多个字段
HDEL bd size

在这里插入图片描述

4、集合-set

4-1、增加、查找和删除元素

SADD key member [member ... ] #增加元素,重复的会自动删除

SADD se1 1 2 3 a b
SADD se2 a b c 1 2

在这里插入图片描述
SREM key member [member ...] #删除元素

SREM se1 2 #删除指定元素

在这里插入图片描述
SPOP key [count] #随机删除count个元素

SPOP se2 2 #随机删除2个元素

在这里插入图片描述
SISMEMBER se1 1 #判断元素是否存在
在这里插入图片描述
SMEMBERS key #获取所有元素

SMEMBERS se1

在这里插入图片描述
SCARD key #获取集合元素个数

SCARD se1

在这里插入图片描述
随机获取count个数元素,count为正数,返回count个不重复数,为负数可能出现重复数据
SRANDMEMBER key [count]

SRANDMEMBER se2 3

在这里插入图片描述

4-2、交集

SINTER key1 key2 ...

SINTER se1 se2 #求se1和se2交集

在这里插入图片描述
SINTERSTORE destination key1 key2 ...

SINTERSTORE se3 se1 se2 #将交集保存到se3中

在这里插入图片描述

4-3、并集

SUNION key1 key2

SUNION se1 se2

SUNIONSTORE destination key1 key2

SUNIONSTORE se4 se1 se2 #将并集保存到se4

在这里插入图片描述

4-4、差集

SDIFF key1 key2

SDIFF se1 se2

SDIFFSTORE destiantion key1 key2

SDIFFSTORE se5 se1 se2 #将差集保存到se5

在这里插入图片描述

5、有序集合-zset

5-1、有序集合

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

5-2、特点和差别

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

5-3、增加、获取和删除元素

ZADD key score member [score member ...]

ZADD math 90 bd 86 ks 88 yf

ZADD还可以用双精度浮点数,+inf表示正无穷,-inf表示负无穷
在这里插入图片描述
ZCARD key

ZCARD math #查看元素个数

在这里插入图片描述
ZSCORE key member #获取元素分数,不存在则返回nil

ZSCORE math bd

在这里插入图片描述
从小到大打印,加上WITHSCORES同时打印分数
ZRANGE key start stop [WITHSCORES]

ZRANGE math 0 -1

在这里插入图片描述

在这里插入图片描述
ZREVRANGE key start stop [WITHSCORES] #从大到小打印

ZREVRANGE math 0 -1

在这里插入图片描述
ZREM key member #移除元素

ZREM math yf

在这里插入图片描述

5-4、获取指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)LIMIT向后偏移offset个元素,并且只获取前count个元素

ZRANGEBYSCORE math 70 90 
ZRANGEBYSCORE math 70 (90 LIMIT 1 2 # 不取90

在这里插入图片描述

5-5、获取指定分数范围的元素个数

ZCOUNT key min max

ZCOUNT math 70 90

在这里插入图片描述

5-6、增加某个元素的分数

ZINCRBY key increment member

ZINCRBY math 5 bd #增加5分,分数也可以是负数,当然就表示减分了

在这里插入图片描述

5-7、按照排名范围删除元素

ZREMRANGEBYRANK key start stop #就是删除按照顺序添加进去的元素start到stop,比如0到2即删除1、2、3位的元素

ZADD test 1 a 2 b 3 c 4 d 5 e 6 f
ZREMRANGEBYRANK test 0 2 #删除排名1到3的元素
ZRANGE test 0 -1

在这里插入图片描述

5-8、按照分数范围删除元素

ZREMRANGEBYSCORE key min max

ZADD test 1 a 2 b 3 c 4 d 5 e 6 f
ZREMRANGEBYSCORE test (3 5 #删除分数大于3小于5的元素

在这里插入图片描述

5-9、计算有序集合的交集

ZINTERSTORE destination numkeys key [key...] [WEIGHTS weight...]] [AGGREGATE SUM|MIN|MAX]
计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合类型存储),返回值为destination键中的元素个数,destination键中元素的分数是由AGGREGATE参数决定,默认是SUM

ZADD s2 10 a 20 b
ZINTERSTORE s3 2 s1 s2 #2是指有几个集合交集的意思
同样也有并集ZUNIONSTORE用法类似,就不再赘述

在这里插入图片描述

五、总结

1、5种数据类型

1-1、string

SET、APPEND等

1-2、List

LPUSH、LRANGE、LPOP、LREM等

1-3、Hash

HSET、HKEYS、HDEL等

1-4、Set

SADD、SREM、SPOP、SMEMBERS、SINTER、SUNION、SDIFF等

1-5、ZSet

ZADD、ZRANGE、ZRANGEBRSCORE、ZCOUNT等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值