Redis是一个key-value型的数据库(相比较之下,MySQL是关联数据库),所有数据在使用时都存放在内存中。
这包含了两层含义:
- 单台Redis能存放多少数据,取决于其内存的大小(假设所有内存都给Redis用)。如果需要存放更多数据,可以增加内存或做集群。
- Redis支持将数据持久化到磁盘中。
但是,不会直接对磁盘进行读写。这种持久化,一般是用于在服务器重启时,先把数据持久化,重启后再从磁盘中读取到内存。
Redis支持五种数据结构,分别是String,List,Hash,Set,Zset。即字符串,列表,哈希,集合,有序集合。
String是Redis最基本的类型,一个key对应一个value
一般情况下,大部分的内容都可以通过序列化后,再存在到Redis中,比如图片或对象等。每个key对就的value存储的内容最大为512M。
Hash即哈希表,即key-value对集合
这种数据结构,特别适合存储对象。并且,Redis支持像数据库中update一样,单独修改对象的某个属性。
List即列表
value是一个字符串的列表。也就是说,一个value可以存放多个字符串,可以按照顺序,添加到头或尾。它就是一个双向链表。很适合做如朋友圈动态列表或消息队列等。
Set即集合
它的value和列表的value一样,也是一个字符串列表,只是Set是无序的,并且,value中的元素是不重复的。和Java中的Set差不多,它的基础原理也是基于Hash实现的,所以添加、删除、查找等的效率等都很快。Redis还为Set提供了多个集合操作的API,如交集、并集、差集等。可以利用来做统计,有多少个共同好友等。
Zset即有序集合
它在Set的基础上,给value中的每个字符串关联了一个score属性,即得分。Zset通过计算得分,将字符串进行从小到大的排序。字符串的得分可以相同。Zset的排序是在插入时直接就做好的。可以用来做排行榜等。
Redis常出现的应用场景
缓存——热数据
热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,相比于memcached提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。
结合具体应用需要注意一下:很多人用Spring的AOP来构建redis缓存的自动生产和清除,过程一般如下:
- step1-> Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有就select 数据库,然后将数据插入redis;
- srep2-> update或者delete数据库前,查询redis是否存在该数据,存在的话先删除redis中数据,然后再update或者delete数据库中的数据。
这种操作,如果并发量很小的情况下基本没问题,但是高并发的情况请注意下面场景:
为了update先删掉了redis中的该数据,这时候另一个线程执行查询,发现redis中没有,瞬间执行了查询SQL,并且插入到redis中一条数据,回到刚才那个update语句,这个线程压根不知道刚才那个select线程犯了一个弥天大错!于是这个redis中的错误数据就永远的存在了下去,直到下一个update或者delete。
计数器
标签:场景,Redis,常见,redis,update,value,Set,数据 From: https://www.cnblogs.com/xfeiyun/p/17254890.html