初步了解Redis
文章目录
1.概念
Redis是用C语言开发的一个开源的高性能的键值对(key-value)数据库. 数据保存在内存. 是一种非关系型(NoSql)数据库.
2.Redis的应用场景
- 缓存 (数据查询、短连接、新闻内容、商品内容等)
- 任务队列 (秒杀、抢购、12306等)
- 数据过期处理 (短信验证码)
- 分布式集群架构中的session分离, session服务器里面
- 应用排行榜
- 网站访问统计
3.Redis的数据类型
redis中存储的数据是以key-value的形式存在的. 其中value支持5种数据. 在日常开发中使用比较多的有字符串(String)、哈希(hash)、字符串列表(list)、字符串集合(set)4种类型, 其中最为常见的是字符串类型.
1.字符串(String)
2.哈希(hash)
3.字符串列表(list)
4.字符串集合(set)
5.有序的字符串集合(sorted-set或者叫zset)
3.1存储字符串
一个key对应一个value, 一个键最大能存储512MB
常用命令:
命令 | 描述 |
---|---|
set key value | 设置指定 key 的值 |
get key | 获取指定 key 的值 |
del key | 删除key |
例如:存储键为name 值为zs
redis:0>set name zs
"OK"
redis:0>
3.2 存储hash
redis中hash是一个键值对集合, 是一个String类型的field和value的映射表,适合用于存储对象. redis存储hash可以看成是String key 和String value的map容器. 也就是说把值看成map集合.
常用命令:
命令 | 命令描述 |
---|---|
hset key filed value | 将哈希表 key 中的字段 field 的值设为 value |
hmset key field1 value1 [field2 value2]… | 同时将多个 field-value (字段-值)对设置到哈希表 key 中 |
hget key filed | 获取存储在哈希表中指定字段的值 |
hmget key filed1 filed2 | 获取多个给定字段的值 |
hdel key filed1 [filed2] | 删除一个或多个哈希表字段 |
hlen key | 获取哈希表中字段的数量 |
del key | 删除整个hash(对象) |
例如: 存储field为f1,value为v1
redis:1>hmset u1 f1 v1
"OK"
3.3 存储list
redis列表按照插入顺序排序,为有序列表. 你可以添加一个元素导列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 2的32 次方- 1 个元素 (4294967295, 每个列表超过40亿个元素)。
- ArrayList
- 单向链表
- 双向链表
常用命令:
命令 | 命令描述 |
---|---|
lpush key value1 value2… | 将一个或多个值插入到列表头部(左边) |
rpush key value1 value2… | 在列表中添加一个或多个值(右边) |
lpop key | 左边弹出一个 相当于移除第一个 |
rpop key | 右边弹出一个 相当于移除最后一个 |
llen key | 返回指定key所对应的list中元素个数 |
例如: 按大小顺序存储1~10的数字
redis:0>rpush list1 1 2 3 4 5 6 7 8 9 10
"10"
3.4 存储set
redis的Set是String类型的无序集合. 集合元素唯一.
常用命令:
命令 | 命令描述 |
---|---|
sadd key member1 [member2] | 向集合添加一个或多个成员 |
srem key member1 [member2] | 移除一个成员或者多个成员 |
smembers key | 返回集合中的所有成员,查看所有 |
应用场景: 投票,差集计算
4. Redis的通用操作和持久化
4.1 通用操作
- keys * : 查询所有的key
- exists key : 判断是否有指定的key 若有返回1,否则返回0
- expire key : 设置这个key在缓存中存活时间
- ttl key : 展示指定key的剩余时间 若返回-1: 永不过期 若返回-2: 已过期或者不存在
- del key : 删除指定key
- rename key : 重命名
- type key : 判断一个key的类型
- ping : 测试连接是否连接
4.2 多数据库性
redis默认是16个数据库, 编号是从0~15. 【默认是0号库】
- select index:切换库
- move key index: 把key移动到几号库(index是库的编号)
- flushdb:清空当前数据库
- flushall:清空当前实例下所有的数据库
4.3 Redis的持久化
redis的高性能是由于其将所有数据都存储在了内存中,为了redis在重启之后仍能保证数据不丢失,需要将数据从内存同步到硬盘中,这一过程就是持久化. redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式. 这两种可以单独使用或者结合使用.
4.3.1 RDB持久化机制
RDB持久化是指在指定时间间隔内将内存中的数据集快照写入硬盘中. 这种方式是将内存中的数据以快照的方式写入到二进制文件中, 默认文件名为dump.rdb 这种方式默认开启,不需要配置.
在redis.Windows.conf配置文件中有如下配置:
其中.上面配置的是RDB方式数据持久化时机:
关键字 | 时间(秒) | key修改数量 | 解释 |
---|---|---|---|
save | 900 | 1 | 每900秒(15分钟)至少有1个key发生变化,则dump内存快照 |
save | 300 | 10 | 每300秒(5分钟)至少有10个key发生变化,则dump内存快照 |
save | 60 | 10000 | 每60秒(1分钟)至少有10000个key发生变化,则dump内存快照 |
4.3.2 AOF持久化配置
AOF持久化机制会将每一个收到的写命令都通过write函数追加到文件中,默认的文件名是appendonly.aof 这种方式默认未开启,使用时需要配置.
在redis.windows.conf配置文件中有如下配置:
将appendonly修改为yes, 但是启动redis的时候需要指定该文件,也就是意味着不能直接点击了, 需要输入命令启动:
开启aof持久化机制后,默认会在目录下产生一个appendonly.aof文件
上述配置为aof持久化的时机,解释如下:(在redis.windows.conf配置)
关键字 | 持久化时机 | 解释 |
---|---|---|
appendfsync | always | 每执行一次更新命令,持久化一次 |
appendfsync | everysec | 每秒钟持久化一次 |
appendfsync | no | 不持久化 |
4.3.3 RDB与AOF优缺点比较
RDB:
优点:
- RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份
- RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快(因为其文件要比AOF的小)
- RDB的性能要比AOF更好
缺点:
- RDB的持久化不够及时,可能会存在数据丢失
- RDB持久化时如果文件过大可能会造成服务器的阻塞,停止客户端请求
AOF:
优点:
- AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)
- AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松
- AOF是增量操作
缺点:
- 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
AOF:
优点:
- AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)
- AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松
- AOF是增量操作
缺点:
- 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
- AOF 的速度可能会慢于 RDB