- redis
1.1 redis的概念
redis是C语言开发的, redis基于内存的数据库(数据存储到了内存当中), redis中数据的存储是以KEY-VALUE的形式来存储,redis中也是有丰富的数据类型
1.2 redis的特点:
•redis将数据存储到内存当中, redis的读写效率非常高: 读 11万/s 写 8万/s
•redis中提供了丰富的数据类型: 五种 String hash list set sortedSet
•注意: redis中数据类型指的是value的数据类型,而key只有String
•redis支持快捷移植数据,
•redis操作都是原子性的,用来保证数据的完整性
1.3 redis的数据类型的使用场景
•String:
•特点: 和java中String是类似的, 表示字符串
•get;set;mget;mset;getrange;strlen;incr ;decr;incrby;decryby
•使用场景: 做缓存 计数器 点赞
•hash:
•特点: 和java中hashmap是类似的,
•hset;hget;hkeys,hlen,hdel
•使用场景: 做缓存(一般可以被String所替代)
•list:
•特点: 和 java中linkedList类似,看做一个队列(FIFO)
•lpush,rpush,lrange,lpop,rpop,llen,lindex
•使用场景: 模拟队列 栈 朋友圈点赞
•set:
•特点: 和java中set集合类型: 去重 无序
•sadd,smembers,spop,srandmember,sismember
•使用场景: 去重操作 抽奖
•sortedSet:
•特点: 去重 有序
•zadd,zrange,zrevrange,zscore(查看元素的的分值),zrangebyscore,zrank,
•使用场景: 排序(排行榜)
Keys的命令:
del,exists,keys
1.4 redis的安装
Windows的下载路径:
https://github.com/microsoftarchive/redis/releases
Redis端口:6379
参考安装文档即可
1.5 redis 的客户端工具: jedis
jedis就是一款java连接redis的客户端工具, jedis中操作API与redis中命令是一样的,大大降低了学习成本,jedis也是redis官方推荐的一款java客户端工具
•如果想jedis, 就需要先进行导包:
redis.clients
jedis
2.9.0
•基本入门程序:
// 演示jedis的入门程序
@Test
public void indexJedis(){
//1. 创建一个jedis对象
// jedis理解为 connection
Jedis jedis = new Jedis(“192.168.72.144”,6379);
//2. 测试是否连通
String pong = jedis.ping();
System.out.println(pong);
jedis.close();
}
1.5.1 jedis操作redis -->String
//使用jedis操作redis–>String
@Test
public void jedisForString() throws InterruptedException {
//1. 创建一个jedis对象
// jedis理解为 connection
Jedis jedis = new Jedis(“192.168.72.144”, 6379);
//2. 执行相关的操作:String
//2.1 赋值:
jedis.set("age","50");
//2.2 取值
String age = jedis.get("age");
System.out.println(age);
//2.3 想让age+1操作
Long age1 = jedis.incr("age");
System.out.println(age1);
//2.4 想让 age-1 操作
Long age2 = jedis.decr("age");
System.out.println(age2);
//2.5 需求: 想让age只存活5秒, 到时间后销毁即可
jedis.expire("age",5);
while(jedis.exists("age")){
Long time = jedis.ttl("age");
System.out.println(time);
Thread.sleep(1000);
}
//2.6 需求: 新创建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);
}
//2.7 如何删除一个key (通用操作)
jedis.del("name");
}
1.5.2 jedis操作redis --> list
//使用jedis操作redis – >list
@Test
public void jedisForList() throws InterruptedException {
//1. 创建一个jedis对象
// jedis理解为 connection
Jedis jedis = new Jedis(“192.168.72.144”, 6379);
jedis.del(“list1”);
//2. 相关操作: list
//2.1 从左侧添加元素, 从右侧弹出元素
// 注意: 不要出现从左侧添加, 从左侧弹出
jedis.lpush(“list1”,“a”,“b”,“c”,“d”);
String rpop = jedis.rpop(“list1”);
System.out.println(rpop);
//2.2 遍历list集合
List<String> list = jedis.lrange("list1", 0, -1);
System.out.println(list);
//2.3 获取列表的个数
Long len = jedis.llen("list1");
System.out.println(len);
//2.4 需求: 从右侧弹出一个元素, 将弹出在从左侧添加回去
jedis.rpoplpush("list1","list1");
//2.2 遍历list集合
list = jedis.lrange("list1", 0, -1);
System.out.println(list);
}
1.5.3 jedis操作redis --> set
//jedis操作redis–>set
@Test
public void jedisForSet() throws InterruptedException {
//1. 创建一个jedis对象
// jedis理解为 connection
Jedis jedis = new Jedis(“192.168.72.144”, 6379);
//2. 相关操作: set
//2.1 添加数据
jedis.sadd("set1","q","w","e","r","e");
//2.2 获取set集合所有的元素
Set<String> set = jedis.smembers("set1");
System.out.println(set);
//2.3 判断中 w是否存在
Boolean flag = jedis.sismember("set1", "w");
System.out.println(flag);
//2.4 获取set集合中数量
Long len = jedis.scard("set1");
System.out.println(len);
}
1.6 jedis中连接池
•基本使用
@Test
public void jedisPoolTest(){
//1. 创建连接池对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(20); // 最大的闲时连接
config.setMinIdle(5); // 最小的闲时连接
JedisPool jedisPool = new JedisPool(config,“192.168.72.144”,6379);
//2. 获取连接
Jedis jedis = jedisPool.getResource();
//3. 测试
System.out.println(jedis.ping());
//4. 关闭:使用连接池的时候一定要关闭
jedis.close();
}
•抽取工具类:
public class JedisUtils {
private static JedisPool jedisPool;
//静态代码块:
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(20); // 最大的闲时连接
config.setMinIdle(5); // 最小的闲时连接
jedisPool = new JedisPool(config,“192.168.72.144”,6379);
}
//获取连接
public static Jedis getJedis(){
return jedisPool.getResource();
}
}