文章目录
一、NoSQL和Redis简介
1、NoSQL-Not Only SQL
NoSQL 指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,NoSQL是web2.0时代海量数据催生的产物
特点
-
不支持SQL语法
NoSQL的世界中没有一种通用的语法,每种NoSQL数据库都有自己的语法,以及擅长的业务场景
-
读写性能高
NoSQL 数据库存在于内存当中,都具有非常高的读写性能,尤其在海量数据下,它的表现非常优秀
-
灵活的数据模型
NoSQL的存储方式十分灵活,存储方式可以是JSON文档,键值对(Key Value)或者其他方式
2、Redis
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人SalvatoreSanfilippo便开始对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。同一年SalvatoreSanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者PieterNoordhuis一起继续着Redis的开发,直到今天。
Redis 全称: Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。 使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高
特点
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还把value分为list,set,zset,hash等数据结构存储
- 因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,提高效率
二、Redis基本使用
1、启动和关闭
1、进入redis
本地连接:redis-cli
远程连接:redis-cli -h 127.0.0.1 -p 6379
退出:exit
有16个数据库:0、1、2、3……
一开始默认进入0号数据库
指定进入某数据库:select
slect 7 # 进入7号数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofA2jhge-1660405945325)(C:\Users\土大夫\AppData\Roaming\Typora\typora-user-images\1646395572935.png)]
2、基础命令
1、添加键值对 set + 键名 + 键值
set bar 1
mset bar1 aaa bar2 bbb # 反向输出,即bar2 bar1
2、查看键值类型 type
type bar
3、查看键名 keys
keys *
keys bar[0-9]
keys bar?
4、查看键值 get + 键名
mget bar bar1
5、删除键值对 del + 键名
del bar
6、修改键名 rename + 键名 + 新键名
rename bar bar1
7、判断键是否存在 exists
exists + 键名
8、时间
(1)设置key过期时间(单位:s):expire + 键名
(2)查看key剩余时间 ttl + 键名
-1:永久 -2:不存在
(3)变成永久(之前不加过期时间就是永久的):persist + 键名
(4)直接设置key就顺便设置时间
set + 键名 + 键值 + ex + 时间
/setex + 键名 + 键值 + 时间
9、清空redis数据库 flushall (!慎用!)
三、数据类型
1、字符串类型 string
# 如果键值value是数字
incr + 键名 # 加1
decr + 键名 # 减1
# 加减整数
incrby + 键名 + 整数
decrby + 键名 + 整数
2、列表 list
1、左添加 (栈:先进后出) lpush myli 3 4 5
2、右添加 (队列:先进先出) rpush myli 2 3 4
3、获取长度:llen
4、查看指定位置元素:lindex myli 3
5、查看列表元素:
全部: lrange myli 0 -1
第一个元素:lrange myli 0
6、删除:
左删除:lpop 右删除:rpop
删除多个:lrem myli count value
lrem myli 2 1 # count > 0 从左删除前2个键值为1的元素
lrem myli -1 2 # count < 0 从右删除前1个键值为2的元素
lrem myli 0 4 # count = 0 删除所有为4的元素
3、哈希 hash
1、设置:
hset bd age 18 # 一个键值对
hmset bd name xiaoming sex nan # 设置多个键值对
2、查看:
hget bd age
hmget bd name sex age
3、获取
获取键:hkeys bd
获取值:hvals bd
获取键值对:hgetall bd
获取键个数:hlen bd
4、判断字段是否存在
hexists bd size # 存在返回1,不存在返回0
hsetnx bd size 180 # 无则增
5、添加数值
hincrby bd age 1 # 添加数值 age = age + 1
6、删除字段
hdel bd size
删除全部:del bd
4、集合 set
1、添加元素
sadd se1 1 2 3 4 5 6
sadd se2 2 4 6 8
2、查看所有元素 smembers se1
3、删除指定元素 srem se1 2
随机删除元素 spop se1 2 # 随机删除2个
4、判断集合中元素是否存在(存在返回1,否则返回0) sismember se1 3
5、获取集合元素的个数 scard se1
6、随机返回元素(+正数表示不重复,-反之) srandmember se1
7、交集:sinter se1 se2
存储交集:sinterstore se3 se1 se2
8、并集:sunion se1 se2
存储并集:sunionstore se4 se1 se2
9、差集:sdiff se1 se2
存储差集:sdiffstore se5 se1 se2
5、有序集合 zset (每个元素都关联一个分数)
1、添加5个元素 # math 是此有序集合键名
zadd math 100 bd 60 mr 88 wz 90 ay 38 xb
2、获取对应元素的分数:zscore math bd
获取所有元素:zrange math 0 -1
获取元素带分数的:zrange math 0 -1 withscores (从小排到大)
zrevrange math 0 -1 withscores (从大到小)
3、获取指定分数范围内的元素个数
zrangebyscore math 60 99
zrangebyscore math (60 (99 # ( 表示不取
4、获取指定分数范围内的元素个数
zcount math (60 99
5、增加元素的分数
zincrby math 6 mr
6、指定排名删除元素
zremrangebyrank math 0 2 # 删除1-3的元素
指定分数删除元素
zremrangebyscore math 60 90
7、有序集合没有差集,分数在交集、并集集合处理时会相加
zadd zes1 1 a 2 b 3 c 4 d 5 e
zadd zes2 9 a 8 b 5 e 10 f 12 g
交集:zinterstore zes3 zes1 zes2
并集:zunionstore zes4 zes1 zes2