redis安装参考:https://blog.csdn.net/weixin_41381863/article/details/88231397
数据结构及常用生产场景
1、String(字符串)--一个键最大能存储512MB
字符串是最常用的数据类型,能够存储任何类型的字符串(即任意key-value),当然也包括二进制、json化的对象、甚至是Base64编码之后的图片。在Redis中一个字符串最大的容量为512MB,可以说是无所不能了。
2、Hash(哈希)--每个 hash 可以存储 2^32 - 1 键值对(40多亿)
hash 是一个键值对集合。常用作存储结构化数据,比如论坛系统中可以用来存储用户的ID、昵称、头像、积分等信息。如果需要修改其中的信息,只需要通过key取出value进行反序列化修改某一项的值,再序列化存储到Redis中。
对于Hash结构存储,由于Hash结构会在单个Hash元素在不足一定数量时进行压缩存储,所以可以大量节约内存。这一点在String结构里是不存在的。
3、List(列表)--列表最多可存储 2^32 - 1)元素 (4294967295, 每个列表可存储40多亿)
列表是简单的字符串列表,按照插入顺序排序(即顺序是固定的)。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。另外,可以利用lrange命令,做基于Redis的分页功能,性能极佳,用户体验好。
4、Set(集合)--集合中最大的成员数为 2^32 - 1
Set是string类型的无序集合,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
Set的特殊之处在于:自动排重。当你需要存储一个列表数据时,又不希望出现重复的数据,那么Redis的Set是最好的选择。
5、Sorted Set(有序集合)
与Set一样都是自动排重的,区别在于:每个元素都会关联一个double类型的分数(分数可以重复)。redis正是通过分数来为集合中的成员进行从小到大的排序。通常用作排行榜。
Redis的事务
redis的事务主要由三个命令组成:multi、exec和discard。
mutli--类似于begin transaction的意思,即开始事务。那么在此命令之后的所有操作都会被绑定在一起。
exec--类似于commit的意思,即提交。
discard--类似于rollback的意思,即回滚。
在Spring redis中的操作示例:
//StringRedisTemplate
@Test
public void method() {
//开启事务支持 默认为false
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.multi();//开始事务
redisTemplate.opsForValue().set("name1", "zhangsan");
redisTemplate.opsForValue().set("name2", "lisi");
// redisTemplate.discard();//回滚
redisTemplate.exec();//提交
System.out.println("done");
}
Redis持久化与恢复
RDB和AOF
1、RDB
RDB方式是Redis默认就开启的持久化方式。在配置文件中有如下一段信息:
save 900 1 ###每900S至少有一条发生数据变化即持久化
save 300 10 ###每300s至少有10条数据发生变化即持久化
save 60 10000 ###每60s至少有10000条数据发生变化即持久化
从这里可以看出,假设 在上次持久化之后的10s内变动了1000条数据后宕机,这1000条数据就会丢失。
RDB持久化的时候,会阻塞主线程的工作,对性能有一定影响。
2、AOF方式(修改配置后,需要重启Redis)
AOF是需要手动开启的。AOF开启后,持久化文件以.aof后缀命名,和配置文件.conf在同一路径下。在配置文件中有如下一段信息:
如上所示:最安全的方式就是每修改一次就持久化一次。
3、恢复数据
a、RDB方式是默认的,所以重启之后会恢复相关数据。
b、AOF---如果数据是手动误删,比如执行flushall,需要进入.aof文件,删除其中的flushall命令,重启redis即可恢复数据。