redis的概念:
redis是一款高性能的NOSQL系列的非关系型数据库
nosql的概念:
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
非关系型数据库的优势:
- 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
- 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
- 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
- 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
总结
- 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库, 让NoSQL数据库对关系型数据库的不足进行弥补;
- 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,目前为止Redis支持的键值数据类型如下:
1) 字符串类型 string
2) 哈希类型 hash
3) 列表类型 list 允许有重复元素
4) 集合类型 set 不允许有重复元素
5) 有序集合类型 sortedset
redis的应用场景
• 缓存(数据查询、短连接、新闻内容、商品内容等等)
• 聊天室的在线好友列表
• 任务队列。(秒杀、抢购、12306等等)
• 应用排行榜
• 网站访问统计
• 数据过期处理(可以精确到毫秒
• 分布式集群架构中的session分离
利用jedis来操作redis中的各种数据类型
所有数据类型都一一举例,调用jedis所需要的jar包在文末上传
package per.test;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Jedis操作各种redis中的数据类型
*/
public class JedisTest {
@Test
public void test1(){
/*
* jedis快速入门
* */
//获取连接
Jedis jedis = new Jedis("localhost", 6379);
//操作
jedis.set("username","zhangsan");
//关闭连接
jedis.close();
}
//操作字符串类型的数据
@Test
public void test2(){
//获取连接
//localhost是本机ip
// 不写参数就默认 Jedis jedis = new Jedis("localhost",6379)
Jedis jedis = new Jedis();
//操作
//存储键值对
jedis.set("username","an");
//获取值(通过键)
String name = jedis.get("username");
System.out.println(name);
//关闭连接
jedis.close();
}
//操作字符串类型数据并指定失效时间 可以用作连接失效
@Test
public void test3(){
//获取连接
Jedis jedis = new Jedis();
//操作
//对于键为lianjie 值为hehe的数据 在20s后会失效
jedis.setex("lianjie",20,"hehe");
//关闭连接
jedis.close();
}
//操作哈希类型 hash : map格式
@Test
public void test4(){
Jedis jedis = new Jedis();
//存储数据
// jedis.hset("class","class1","12");报错 出现了java特有关键词class(特有)
jedis.hset("user","class1","12");
jedis.hset("user","class2","13");
jedis.hset("user","class3","20");
jedis.hset("user1","grade1","1");
jedis.hset("user1","grade2","2");
//获取数据(单个)
String infor = jedis.hget("user","class2");
System.out.println(infor);
//获取hash中所有map中的数据jedis.hgetAll("user");
// 返回的是Map<String,String>也就是对应的field和value
//获取user(key)中的字段及值
Map<String,String> user = jedis.hgetAll("user");
//keyset 获取所有的field
Set<String> keys = user.keySet();
for (String key : keys) {
//获取value值
String value = user.get(key);
System.out.println(key+value);
}
//获取user1(key)中的字段及值
Map<String,String> user1 = jedis.hgetAll("user1");
//keyset 获取所有的field
Set<String> keys1 = user1.keySet();
for (String key : keys1) {
//获取value值
String value = user1.get(key);
System.out.println(key+value);
}
jedis.close();
}
//操作list类型
@Test
public void test5(){
//获取连接
Jedis jedis = new Jedis();
//操作
//存储
jedis.lpush("mylist","a","b","c");//从左向右存
jedis.rpush("mylist","a","b","c");//从右向左存
//获取范围
List<String> list = jedis.lrange("mylist",0 ,-1);
System.out.println("mylist:"+list);
//list弹出 (移除)
//lpop把最左端的value弹出
String valuel = jedis.lpop("mylist");
//rpop把最右端的value弹出
String valuer =jedis.rpop("mylist");
System.out.println("左边弹出的值"+valuel);
System.out.println(valuer);
//断开
}
//操作set类型集合(不允许有重复,有重复则不添加)
@Test
public void test6(){
//获取连接
Jedis jedis = new Jedis();
//操作
//set存储
jedis.sadd("set","hello","java","word","hello");
//set获取 返回值类型跳转此方法源码产看
Set<String> set = jedis.smembers("set");
System.out.println(set);
//断开
jedis.close();
}
//操作有序集合sortedset 不允许重复元素 且元素有序
/*
有序集合类型 sortedset:
不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。
redis正是通过分数(score)来为集合中的成员进行从小到大的排序。
*/
@Test
public void test7(){
//获取连接
Jedis jedis = new Jedis();
//操作
//存储数据
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
//获取数据
Set<String> set =jedis.zrange("mysortedset",0,-1);
System.out.println(set);
/*
输出结果 按score的值来决定member(成员)的排序
[亚瑟, 后裔, 孙悟空]
*/
//关闭
jedis.close();
}
//jedis连接池使用 这个连接池是内置的不需要从外部导入
@Test
public void test8(){
//创建连接池对象
JedisPool jedisPool = new JedisPool();
//获取连接
Jedis jedis = jedisPool.getResource();
//使用
jedis.set("usernamer","kevin");
//关闭 这个关闭是把其归还到连接池中 需要用再去拿 不用浪费资源
jedis.close();
}
}
发现好像只能上传资源
//等资源审核过了我再填这个坑吧--
https://download.youkuaiyun.com/download/qq_33551891/11110579
https://download.youkuaiyun.com/download/qq_33551891/11110582
...非作者下载居然要积分 有需要的私信我吧
附上 redis文档在线资源路径