1、Redis介绍
1.1 概念
redis是C语言开发的, redis基于内存的数据库(数据存储到了内存当中), redis中数据的存储是以KEY-VALUE的形式来存储,redis中也是有丰富的数据类型。分布式集群中,同样的缓存信息需要存储在不同的服务器上,造成资源浪费,读取效率慢;使用redis服务,将共同的缓存信息放在此服务器上。
1.2 特点
- redis将数据存储到内存当中, redis的读写效率非常高: 读 11万/s 写 8万/s
- redis中提供了丰富的数据类型: 五种 String(字符串)、 hash(散列)、 list(列表)、 set(集合) 、sortedSet(有序集合)
- redis中数据类型指的是value的数据类型,而key只有String
- redis支持快捷移植数据
- redis操作都是原子性的,用来保证数据的完整性
1.3 五种数据类型使用场景
(1)String:
做缓存 计数器 点赞 分布式缓存
(2)hash:
做缓存(一般可以被String所替代)
(3)List
不去重,有序
模拟队列 栈 朋友圈点赞
(4)set:
•去重 无序
去重操作 抽奖
(5)sortedSet:
去重 有序
排序(排行榜)
2、Redis安装
Windows的下载路径:
https://github.com/microsoftarchive/redis/releases
Redis端口:6379
图形化操作工具:RedisDesktopManager
3、Redis使用
3.1 导入依赖jedis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
3.2 获取jedis对象
方式一: 直接new,指定ip和端口:
Jedis jedis = new Jedis("127.0.0.1",6379);
方式二: 创建jedis连接池对象,池中获取对象,并抽取成工具类:
// jedis就是一款java连接redis的客户端工具,工具类返回一个redis对象
public class JedisUtil {
private static JedisPool pool = null;
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(50);
config.setMinIdle(5);
pool= new JedisPool(config,"127.0.0.1",6379);
}
public static Jedis getJedis(){
return pool.getResource();
}
}
3.3 jedis对象操作五种数据类型
详细命令可参考官网:http://redis.cn/commands.html
public class RunRedis {
//1、String类型
@Test
public void StringRun() throws Exception{
/*获取对象,,手动或者工具类*/
//Jedis jedis1 = new Jedis("127.0.0.1", 6379);
Jedis jedis = new JedisUtil().getJedis();
/*选择存入哪个数据库,默认为15个*/
jedis.select(0);
//赋值:
jedis.set("age","50");
//取值
String age = jedis.get("age");
System.out.println(age);
// 想让age+1操作
Long age1 = jedis.incr("age");
System.out.println(age1);
// 想让 age-1 操作
Long age2 = jedis.decr("age");
System.out.println(age2);
// 需求: 想让age只存活5秒, 到时间后销毁即可
jedis.expire("age",5);
while(jedis.exists("age")){
Long time = jedis.ttl("age");
System.out.println(time);
Thread.sleep(1000);
}
// 需求: 新创建name的时候, 为name添加有效时长为5秒
jedis.setex("name",5,"葵花宝典");
while(jedis.exists("name")){
//返回值: -2 -1
// -2: 表示的是当前key已经不存在
//-1 : 表示当前key永久有效
Long time = jedis.ttl("name");
System.out.println(time);
Thread.sleep(1000);
}
// 如何删除一个key (通用操作)
jedis.del("name");
}
//2、Hash类型(了解)
//3、List类型
@Test
public void ListRun() throws Exception{
/*获取对象*/
Jedis jedis = new JedisUtil().getJedis();
// 从左侧添加元素, 从右侧弹出元素
// 注意: 不要出现从左侧添加, 从左侧弹出
jedis.lpush("list1","a","b","c","d");
// 遍历list集合
List<String> list = jedis.lrange("list1", 0, -1);
System.out.println(list);
//从队列右边移出第一个元素
/*String rpop = jedis.rpop("list1");
System.out.println(rpop);*/
// 获取列表的个数
Long len = jedis.llen("list1");
System.out.println(len);
}
//4、Set类型 去重,无序
@Test
public void SetRun() throws Exception{
/*获取对象*/
Jedis jedis = new JedisUtil().getJedis();
// 添加数据
jedis.sadd("set1","q","w","e","r","e");
//2.2 获取set集合所有的元素
Set<String> set = jedis.smembers("set1");
System.out.println(set);
// 判断中 w是否存在
Boolean flag = jedis.sismember("set1", "w");
System.out.println(flag);
//获取set集合中数量
Long len = jedis.scard("set1");
System.out.println(len);
}
}