redis详解
简述
redis是一款高性能的NOSQL系列的非关系型数据库,与关系型数据库不同redis的数据是存储在内存中的。因为操作关系型数据库的过程非常耗时,当服务器查询一些不太经常变化的数据时,我们可以把这些数据放到内存中,这和缓存类似,先到redis中查询,有数据就不用查mysql了。
主流的NOSQL产品有键值形式存储数据库、列存储数据库、文档型存储数据库、图形式数据库,本片博客介绍的redis就是键值形式存储的数据库。
redis的数据结构
我们需要知道的是redis存储的是键值对,其中key是字符串形式,value有5种不同的数据结构
字符串类型 string | |
哈希类型 hash | map格式 |
列(链)表类型 list | linkedlist格式。支持重复元素 |
集合类型 set | 不允许重复元素 |
有序集合类型 sortedset | 不允许重复元素,且元素有顺序 |
redis的下载和安装
官网:https://redis.io/ 中文网:https://www.redis.net.cn/
下载好并解压后我们得到如下文件
解压后可直接使用,我们只需关心三个文件
redis.windows.conf | 配置文件 |
redis-cli.exe | redis的客户端 |
redis-server.exe | redis服务器端 |
想要运行直接运行redis-server.exe即可,它监听的端口是6379
运行redis-server.exe后不关闭cmd窗口,运行redis-cli.exe即可连接到本机的redis数据库,就可以敲命令了
常用命令操作
字符串类型
存储 | set key value |
获取 | get key |
删除 | del key |
哈希类型
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
存储 | hset key field value |
获取 |
hget key field 获取对应的field的value hgetall key 获取当前的所有key和value对应关系 |
删除 | hdel key field |
注意field是当前key的value里的key
列表类型
列表也是链表,它按照插入顺序进行排序,我们可以添加一个元素到列表的头部或尾部
添加 |
lpush key value: 将元素加入列表左表 rpush key value:将元素加入列表右边 |
获取 | lrange key start end |
删除 |
lpop key: 删除列表最左边的元素,并将元素返回 rpop key: 删除列表最右边的元素,并将元素返回 |
注意lrange的起始和结束索引是从0开始左闭右闭的,若想获取所有数据则为 0 -1
这种形式我们可以当成一个双向队列来理解
集合类型
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
存储 | sadd key value |
获取 | smembers key:获取set集合中所有元素 |
删除 | srem key value:删除set集合中的某个元素 |
有序集合类型
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
存储 | zadd key score value |
获取 | zrange key start end [withscores] |
删除 | zrem key value |
注意在zrange后加withscores参数会同时把他们的分数拿出来
通用命令
keys * | 查询所有的键 |
type key | 获取键对应的value的类型 |
del key | 删除指定的key value |
redis的持久化
redis是内存中的数据库,当redis服务器重启或者电脑重启,数据就会丢失。我们可以把redis的数据持久化到硬盘中,这样数据就不会丢失。数据库持久化方法分为RDB和AOF两种方式。
RDB
RDB是默认方式,不需要进行配置。redis会在一段时间内检测key的变化,然后持久化数据。
我们打开redis的配置文件,可以看到save段有三行,代表:
save 900 1 | 900秒之后有1个key发生了改变就进行一次持久 |
save 300 10 | 300秒之后有1个key发生了改变就进行一次持久 |
save 60 10000 | 900秒之后有1个key发生了改变就进行一次持久 |
我可以根据服务器的需求更改这三个配置文件,并通过以配置文件方式打开redis,达到自动保存的条件后redis会自动把数据持久化到redis的根目录下,文件名叫dump.rdb。当我们重启数据库后redis会自动将持久化的数据载入内存。
AOF
AOF是日志记录的方式,可以记录每一条命令的操作。可以每一次命令后持久化数据,对性能影响比较大。
我们打开redis的配置文件,找到appendonly的配置项,将no改为yes即可
改为yes就开启了AOF的持久化操作,再到下面找到有三种配置
appendfsync always | 每一次操作都进行持久化 |
appendfsync everysec | 每隔一秒进行一次持久化 |
appendfsync no | 不进行持久化 |
配置完后我们打开redis服务端,然后用客户端添加数据,可以看到redis目录下有一个叫appendonly.aof的持久化文件
当我们再次启动服务器,再打开就有数据了