Redis是一个速度非常快的非关系数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping)可以将数据存储在内存,也可以持久化到硬盘
redis下载安装:
Redis官方网站:http://www.redis.io/
官方下载:http://redis.io/download 可以根据需要下载不同版本
github下载地址: https://github.com/dmajkic/redis/downloads
redis教程:http://www.yiibai.com/redis/redis_backup.html
点击进入下载页面
windows下:
解压下载的zip压缩包即可
双击redis-cli.exe,同样可以选用命令行打开(客户端可以启动多个)
添加一条数据并取出:
String 类型:string 类型的值最大能存储 512MB
eg:
Hash(哈希):键值对集合,类似于java中的Map
eg :
List(列表):类试java中的list集合
eg:
set(集合):类试与java中的set,无序,不重复
eg:
zset(有序,不重复集合)
eg:
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
创建一个频道并订阅:
此窗口现在为订阅者,现在模拟(发布者)打开一个新的窗口向订阅者发送两条消息,
可以看到订阅者接收到来自 redis_sub频道的两条消息,现在模拟打开一个新的订阅者,再次发布一条消息:
可以看到,两个订阅者,同时收到了redis_sub频道发布的消息, 但是新开的订阅者不能收到历史(之前发布的两条)消息.
SAVE : 备份(会在安装目录下生产dump.rdb文件)
BGSAVE : 恢复(将要恢复的dump.rdb文件放在安装目录下,使用此命令即可)
CONFIG get requirepass : 查看是否设置密码
CONFIG set requirepass ‘你的密码’ : 设置密码
设置密码后需要验证身份,否则命令无法执行 : AUTH password
所需依赖:
<dependency>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
<version>3.2.0version>
dependency>
案例:
package com.redis.test;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author : lichenfei
* @date : 2019年12月31日
* @time : 下午12:59:28
*
*/
public class Demo {
private JedisPool jedisPool;
private Jedis jedis;
@Before
public void before() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
jedis = jedisPool.getResource();
System.out.println(jedis.isConnected());
}
/**
* 操作字符串
*/
@Test
public void stringTest() {
jedis.set("username", "lcf");// 设置值
System.out.println(jedis.get("username"));// lcf
jedis.del("username");
System.out.println(jedis.get("username"));// null
}
/**
* 操作map
*/
@Test
public void mapTest() {
Map<String, String> map = new HashMap<String, String>();
map.put("name", "lcf");
map.put("age", "18");
map.put("sex", "M");
jedis.hmset("map", map);
System.out.println(jedis.hgetAll("map"));// {name=lcf, age=18, sex=M}
}
/**
* set
*/
@Test
public void setTest() {
jedis.sadd("set", "a", "z", "b", "d", "b", "a");
System.out.println(jedis.smembers("set").toString());// [d, b, c, a, z]
}
/**
* zset
*/
@Test
public void zSetTest() {
jedis.zadd("zset", 0, "lcf");
jedis.zadd("zset", 1, "lcf1");
jedis.zadd("zset", 2, "lcf2");
jedis.zadd("zset", 3, "lcf3");
jedis.zadd("zset", 3, "lcf4");
System.out.println(jedis.zrange("zset", 0, 3));// [lcf, lcf1, lcf2, lcf3]
System.out.println(jedis.zrange("zset", 0, -1));// 所有数据
System.out.println(jedis.zcard("zset"));// 长度 : 5
}
/**
* list
*/
@Test
public void listTest() {
jedis.del("list");
jedis.lpush("list", "la", "lb", "lc", "ld");
System.out.println(jedis.lrange("list", 0, -1));// [ld, lc, lb, la]
}
}
新建springboot项目:(目录如下)
application.properties配置文件:
#springboot服务配置
server.port=8081
server.servlet.context-path=/redis
#redis配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
IndexController:
package com.lcf.redis.contro;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : lichenfei
* @date : 2020年1月2日
* @time : 下午1:50:00
*
*/
@RestController
public class IndexController {
@Autowired
private StringRedisTemplate redisTemplate;
private static boolean isSet = false;
@RequestMapping("index")
public String index() {
if (!isSet) {
redisTemplate.opsForValue().set("string", "string-data", 5, TimeUnit.SECONDS);// 数据保存5秒
isSet = true;
}
Object object = redisTemplate.opsForValue().get("string");
return "data : " + object;
}
}
测试:
启动redis服务,启动项目浏览器访问:http://127.0.0.1:8081/redis/index
五秒后访问结果: