redis数据库
非关系型数据库
非关系型数据库是什么?
非关系型数据库其实是相对于关系型数据库而言的,关系型数据库中同种数据存储在一张表中,使用表将不同种类的数据进行分隔并且表中的数据如果存在主键,也可以根据主键确定表与表之间的关系,或者说是数据与数据之间的关系;而非关系型数据库中所有的数据都是存放在一起的,数据与数据之间没有关系,我们无法通过一次查询而找到具有某种关系的数据(即使数据真的有关系)。
非关系型数据库的优缺点?
优点
- 非关系型数据库可以将数据存放到内存中,提高数据的访问速度
- 非关系型数据库中有多种类型的数据,可以存储很多不同种类的数据
缺点
- 数据存储在内存中,如果出现突发性的故障可能会导致数据丢失,例如断电等情况,数据库中的数据还没有来得及保存(如果数据库正常关闭则会将数据保存在硬盘或者磁盘中)
- 由于非关系型数据库的数据种类不统一并且没有按表进行划分,所以这些数据不容易管理和维护
- 数据类型不统一并且数据之间不存在关系,导致非关系型数据库只能进行简单的查询,不能像关系型数据库那样可以进行关联查询
目前学到的只是比较浅,能想到的只有这些
redis数据库中的数据类型
redis中的数据是以键值对的方式进行存储,其中键的类型统一是string类型,而值具有很多种数据类型
五种常见的数据类型
- string字符串
- hash哈希
- list列表
- set集合
- sorted set / zset有序集合
我们在对redis数据库中的数据进行存储时会使用不同的命令来存储不同数据类型的数据
string字符串
字符串类型的数据是指由很多和字符组成的一串数据,多用于存储一些结构较为简单的数据
set key value设置指定key的值
get key 获取指定key的值
setex key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
setnx key value 只有在key不存在时设置key的值
hash哈希
哈希类型的数据是键值对形式的(这里我们把键值对中的键称为属性,值称为属性的值),并且键值对都是string字符串类型的,就好比Java中的对象一样,我们将对象名当作键,对象中的成员变量名当作属性,成员变量的值当作属性的值。对象的成员变量可以有多个,哈希类型的数据也是一样可以存在多个。
所以说在Java中通常使用hash类型的数据来存储对象,并且如果添加了相同属性的数据则会将原来属性的值进行替换。
hset key field value 将哈希表key中的字段field的值设置为value
hget key field 获取存储在哈希表中指定字段的值
hdel key field 删除存储在哈希表中的指定字段
hkeys key 获取哈希表中的所有字段
hvals key 获取哈希表中的所有值
list列表
list类型的数据相当于链表,一个键可以存在多个值并且值是有序的(根据存入数据的顺序),list类型的数据可以从左边/右边插入/删除,但是想要获取指定范围内的元素、获取列表的长度只能从左边进行获取。
lpush key value [value…] 将一个或多个值插入到列表头部
lrange key start stop 获取列表指定范围内的元素(下标从0开始并且包含stop)
rpop key 移除并获取列表中最后一个元素
llen key 获取列表长度
set集合
set类型的数据就像Java中的set集合,数据是无序的并且不能元素重复的,可以存在多个
通常用于存储一些相同性质的数据,并且这些数据没有先后顺序
sadd key member [member…] 向集合添加一个或多个成员
smembers key 返回集合中的所有成员
scard key 获取集合的成员数
sinter key [key…] 返回给定所有集合的交集
sunion key [key…] 返回给定所有集合的并集
srem key member [member…] 删除集合中一个或多个成员
zset有序集合
zset类型的数据本身是和set类型的数据一样是无序且不能重复的,但是在添加数据时需要为数据设置score分数,我们在查询数据时可以通过赋予数据的分数将数据按照一定顺序进行排列。
通常存储一些具有相同性质的数据,并且这些数据有一定的顺序。例如:微博上的热搜,是根据搜索人数进行排名显示的。
zadd key score member [score… member…] 向有序集合添加一个或多个成员
zrange key start stop [withscores] 通过索引区间返回有序集合中指定区间内的成员(默认为升序排列,使用zrevrange变为降序排列)
zincrby key increment member 有序集合中指定成员的分数加上增量increment
zrem key member [member…] 移除有序集合中的一个或多个成员
redis数据库通用命令的常用命令
redis的通用命令是不分数据类型的,所以一般是根据key进行操作的
keys pattern 查找所有符合给定模式(pattern)的key(通常使用keys *来查询所有的数据)
exists key 检查给定key是否存在
type key 返回key所存储值的类型
del key 该命令用于在key存在时删除key 可以删除多个