Redis是什么?
Redis是一个key-value的nosql(非关系型)数据库,先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多,主要用来做缓存数据库的数据和web集群,被当作中央缓存存放session的。
Redis的使用场景
Redis常见的场景有如下几种:
1. 缓存: 把经常需要查询、很少修改的数据,放到读取速度很快的空间(内存)。以便下次访问数据的时间更少,并减轻服务器的压力。
2. 计数器:redis中的计数器是原子性的内存操作,可以解决溢出问题。
3. session缓存服务器:web集群时作为session缓存服务器。
Redis对象保存方式
- Json字符串:需要把对象转换为Json字符串,当作字符串处理,直接使用set、get来设置和获取–少量数据对对象或字段不多。
优点:获取和设置比较简单。
缺点:没有提供专门的方法,需要将对象转换为Json(使用json包),需考虑JSON转换的性能问题 - 字节:需要做序列号,就是把对象序列化为字节来保存–存储百万级的大数据对象。
Redis数据淘汰机制
在redis中,允许用户设置最大使用内存大小server.maxmemeory,在内存限定的情况下是很有用的,譬如,在一台8G的机子上部署4个redis服务点,每一个服务点分配1.5G的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。—内存大小有限,需要保存有限的数据。
因而就需要淘汰一些数据,redis提供了6种淘汰机制:
1.volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
2.volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
3.volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
4.allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
5.allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
6.no-enviction(驱逐):禁止驱逐数据。
redis确定驱逐某个键值对后,会删除这个数据,并将这个数据变更消息发布到本地(AOF持久化)和从机(主从连接)。
Java访问Redis
1.java客户端使用jedis 来访问redis服务器,类似java通过jdbc访问mysql一样。
2.Spring可以使用spring data来访问redis,而spring data只是对jedis的二次封装。
Redis集群
当一台数据无法满足要求时,可以使用redis集群来处理,类似于mysql的读写分离。