Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis优势:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
Redis中的数据结构:
- String(字符串):特点就是key - value类型
- Hash(哈希结构):特点是key - (field - value), (field2 - value2), (field3- value3)......
- List(链表):特点是 key - value1,value2,value3,value4....
- Set(集合):特点是key - value1,value2,value3.....(集合的value是无顺序的)
- hSet(有序集合):特点key - (value:score),(value:score),(value:score)... (有序集合是根据value的评分排序)
- 基数
Redis应用场景
1)缓存服务器
2)高并发的读写
3)数据共享
4)分布式锁
5)自增长编号的生成
java操作redis
# 导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
public static void main(String[] args) {
//连接redis
Jedis jedis = new Jedis("192.168.189.130",6379);
jedis.auth("root"); // 密码
//操作redis
jedis.set("name","xiaoming");
jedis.set("age","19");
Object name = jedis.get("name");
Object age = jedis.get("age");
System.out.println(name+" "+age); // xiaoming 19
//关闭连接
jedis.close();
}
Spring操作redis
1.导入依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
2.配置applicationContext-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置redis连接池对象 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大空闲数 -->
<property name="maxIdle" value="50"/>
<!-- 最大连接数 -->
<property name="maxTotal" value="100"/>
<!-- 最大等待时间 -->
<property name="maxWaitMillis" value="20000"/>
</bean>
<!-- 配置redis连接工厂 -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- 配置连接池 -->
<property name="poolConfig" ref="poolConfig"/>
<!-- 配置主机 -->
<property name="hostName" value="192.168.189.130"/>
<!-- 配置端口 -->
<property name="port" value="6379"/>
<!-- 配置密码 -->
<property name="password" value="root"/>
</bean>
<!-- 配置redis模板对象 -->
<bean class="org.springframework.data.redis.core.RedisTemplate">
<!-- 配置连接工厂 -->
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
</beans>
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-redis.xml")
public class Main {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test(){
redisTemplate.opsForValue().set("name","liming");
redisTemplate.opsForValue().set("age",21);
Object name = redisTemplate.opsForValue().get("name");
Object age = redisTemplate.opsForValue().get("age");
System.out.println(name+" "+age); // liming 21
}
}
SpringBoot操作redis
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.配置application.yml
spring:
redis:
host: 192.168.189.130
password: root
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void contextLoads() {
redisTemplate.opsForValue().set("name","xiaoli");
redisTemplate.opsForValue().set("age",23);
Object name = redisTemplate.opsForValue().get("name");
Object age = redisTemplate.opsForValue().get("age");
System.out.println(name+" "+age); // xiaoli 23
}
}