一、概述
使用Redis进行应用设计和开发的一个核心概念是数据类型。与关系数据库不同,在Redis中不存在需要我们担心的表,在使用Redis进行应用设计和开发时,我们首先应该考虑的是Redis原生支持的哪种数据类型阳适合我们的应该场景,此外,我们无法像在关系数据库中那样,使用sql来操作Redis中的数据,相反,我们需要直接使用API发送数据反对应的命令,来操作想要操作的数据。
二、数据类型
2.1、字符串类型
字符串类型是编程语言和应用程序中最常见和最有用的数据类型,也是Redis的基本数据类型之一,事实上,Redis中所有键都必须是字符串。
2.2、hash数据类型
哈希表示字段和值之间的映射关系,与JAVA中的Map类似,Redis数据集本身就可以看做一个哈希,其中字符串类型的键关联到如字符串和列表之类的数据对象,而Reidis的数据对象也可以再次使用哈希,其字段和值必须 是字符串。
2.3、set数据类型
集合类型是由唯一,无序对象组成的集合(collection).它经常用于测试某个成员是集合中,重复项删除和集合运算(求并,交,差集),Redis的值对象可以是字符串集合。
2.4、zset(sortset)数据类型
有序集合是一个类似于set但是更复杂的数据类型,单词sorted意为着这种集合中的每个元素都有一个可用于排序的权重,并且我们可以按顺序从集合中得到元素在某些需要一个保持数据有序的场景中,使用这种原生的序的特性是很方便的。
三、Redis中常见的命令
3.1、Redis中key的操作
1.keys * :查询当前redis中所有的key
2.expire key second :为指定的key设置过期时间
3.ttl key :查看指定key的过期时间
4.del key:删除指定的key
5.exists key:判断指定的key是否存在。存在返回一个1;
3.2、Redis中数据库操作的命令
1.select index :选择相应的数据库
2.flushdb:清空当前库
3.flushall:清空当前库
3.3、string数据类型的命令
1.set key value:存放指定key的字符串类型。
2.setnx key value:如果指定的key存在,则不存放redis中
3.get key :获取指定key的值
4.mset key value key value。。。:存储多个key和value的值
5.mget key key key。。。:获取多个key对应的值
6.incr key :对指定的key的value进行累加
7.decr key :对指定的key的value进行递减
3.4、hash散列类型的命令
1.HSET key fineld value [field value]:存放指定key的field和value值
2.hget key field:获取指定key的field对应的value值。
3.hkeys key:获取指定key对应的所有field。
4.havls key:获取指定key对应的所有value值
5.hgetall key:获取指定key下所有的内容
3.5、list队列类型的命令
1.lpush key value:根据key从左边存放对应的队列数据
2.lrange key start end:获取key指定的元素
3.LPOP key:从左边获取指定的第一个元素 并移除该元素
3.6、set集合类型的命令
set集合和list队列的区别就在于不允许重复,无序
1.SADD key value value。。。
2.smembers key:获取指定key下所有的元素
3.SPOP key:获取指定key的元素,随机
4.SISMEMBER key value 判断元素是否在集合中
3.7、sort set集合类型的命令
和上面的set的区别是有序,多了一个字段score
1.ZADD key score member score membere
2.ZRANGE
3.8、redis的应用场景
1.热点数据的缓存:座位缓存数据。缓存都是基于内存走的
2. 限时业务的运用: 秒杀 存放用户信息 短信保存 。expire
3. 计数器相关问题: 点赞量 播放量 访问量 incr
4. 排行榜相关问题:
5. 分布式锁: setnx()
四、redis的持久化方式
持久化: 把内存中的数据持久到磁盘的过程,就是持久化。
作用: 防止数据丢失。
redis持久化的方式: (1)RDB 快照 (2)AOF 日志追加。
4.1 rdb持久化方式
RDB 持久性以指定的时间间隔执行数据集的时间点快照 . RDB是redis默认的持久化方式. 存在dump.rdb
(1) 什么时候会触发rdb的方式
【1】手动触发 save命令 bgsave命令
save命令和bgsave的区别
save该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
bgsave 执行该命令时,Redis会在后台==异步==进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
【2】自动触发----底层原理就是调用了bgsave命令。
4.2、如何回复数据
演示:
1. 关闭redis服务
2. dump.rdb复制到其他目录
3. 删除dump.rdb
4. 其他服务 看到没有数据。
2. 关闭服务。删除dump.rdb
3. 把备份的dump.rdb复制到当前目录
4.其他redis.
你要把redis rdb文件放入你的安装目录下。
4.3、rdb持久化的优缺点
优点:
1.持久化速度块,恢复速度也快。
缺点:
1.数据完整性差。
4.4、AOF持久化方式
RDB全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的==写命令==都通过write函数追加到文件中。通俗的理解就是日志记录。
优缺点:
优点: 数据库完整高。
缺点: 恢复数据时效率低。每次都要往日志文件中追加写命令。
如果上面两种持久化都使用,默认加载appendonly.aof文件,因为redis认为它的数据完整性高。企业中就不要开启appendonly了。