Redis数据库
1. 什么是Redis
- redis是一款高性能的NOSQL系列的非关系型数据库
- 什么是NOSQL,全新的数据库概念,解决web2.0网站的高并发问题,解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。。
- redis的优点,简单部署,开源软件,数据存在缓存中,查询速度快。
- 数据存储方式,key,value,文档形式、图片形式等等,可以存储基础类型以及对象或者是集合等各种格式。
- redis的缺点,维护的工具和资料有限,不提供对sql的支持,不提供关系型数据库对事务的处理。
- 关系型数据库,与非关系型数据库的比较,非关系型数据库查询无需经过sql层的解析,所以性能高,且数据间没有耦合性,扩展性高。关系型数据库,SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。支持事务,数据安全性高。
2. 主流的NOSQL
3. Redis的数据类型
- 字符串类型 String
- 哈希类型 hash:map格式
- 列表类型 list: linkedlist格式。支持重复元素
- 集合类型 set: 不允许重复元素
- 有序集合类型 sortedset:不允许重复元素,且元素有顺序
4. Redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)。
- 聊天室的在线好友列表。
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒
- 分布式集群架构中的session分离
5. Redis的下载安装
官网:https://redis.io
中文网:http://www.redis.net.cn/
解压直接可以使用:
redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端
6. Redis命令
- 字符串类型 string
*存储: set key value
*获取: get key
*删除: del key - 哈希类型 hash
*存储: hset key field value
*获取:hget key field: 获取指定的field对应的值,hgetall key:获取所有的field和value。
*删除: hdel key field - 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
*添加:lpush key value: 将元素加入列表左表,rpush key value:将元素加入列表右边
*获取: lrange key start end :范围获取
*删除:lpop key: 删除列表最左边的元素,并将元素返回,rpop key: 删除列表最右边的元素,并将元素返回。 - 集合类型 set : 不允许重复元素
*存储:sadd key value
*获取:smembers key:获取set集合中所有元素
*删除:srem key value:删除set集合中的某个元素 - 有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
*存储:zadd key score value(score 指的是排序位置,可以是1、2、3、4、…,存进去的数据会根据这排序排列)
*获取:zrange key start end [withscores]
*删除:zrem key value - 其他通用命令
keys(空格) * : 查询所有的键
type key : 获取键对应的value的类型
del key:删除指定的key value
7. Jedis的使用
- String
private static void stringJedis() {
//1.实例化Jedis对象
Jedis jedis = new Jedis("localhost",6379);
//2.String操作
jedis.set("username","zhangsan");//set key value
jedis.get("username");//get key value
jedis.setex("age", 10, "12");// 特殊方法,创建key,value,10秒后删除
jedis.close();//关闭连接
}
- hash
private static void hashJedis() {
//1.实例化Jedis对象
Jedis jedis = new Jedis("localhost",6379);
//2.Hash操作
jedis.hset("user", "name", "段延庆");//添加
jedis.hset("user", "age", "32");
jedis.hset("user", "gender", "男");
String hget = jedis.hget("user", "name");//获取
System.out.println(hget);
jedis.hdel("user", "name","age");//删除
String hget2 = jedis.hget("user", "name");//获取
System.out.println("获取"+hget2);//null
jedis.close();//关闭连接
}
- list
private static void listJedis() {
//1.实例化Jedis对象
Jedis jedis = new Jedis("localhost",6379);
//2.List操作
jedis.lpush("shuangfeiren", "A","B","C");//左添加
jedis.rpush("shuangfeiren", "A","B","C");//右添加
String lpop = jedis.lpop("shuangfeiren");//左弹出
System.out.println(lpop);
String rpop = jedis.rpop("shuangfeiren");//右弹出
System.out.println(rpop);
List<String> lrange = jedis.lrange("shuangfeiren", 0, -1);//获取指定元素
System.out.println(lrange);
jedis.close();//关闭连接
}
- set
private static void setJedis() {
//1.实例化Jedis对象
Jedis jedis = new Jedis("localhost",6379);
//2.Set操作
jedis.sadd("setAdd", "A","A","B");//添加
Set<String> smembers = jedis.smembers("setAdd");//获取
jedis.srem("setAdd", "A");//删除
Set<String> smembers2 = jedis.smembers("setAdd");//获取
System.out.println(smembers2);
jedis.close();//关闭连接
}
- storedSet
private static void sortedJedis() {
//1.实例化Jedis对象
Jedis jedis = JedisUites.getJedis();
//2.sortedSet操作
jedis.zadd("paihangban", 500, "亚瑟");
jedis.zadd("paihangban", 1000, "李白");
jedis.zadd("paihangban", 950, "韩信");
jedis.zadd("paihangban", 99999,"99999");
jedis.zrem("paihangban", "99999");
Set<String> zrange = jedis.zrange("paihangban", 0, -1);
System.out.println(zrange);
jedis.close();//关闭连接
}
8.连接池的使用
public class JedisUites {
private static JedisPool jedisPool;
static {
try {
//1.读取配置文件
Properties properties = new Properties();
properties.load(JedisUites.class.getClassLoader().getResourceAsStream("jedis.properties"));
//2.获取JedisPoolConfig配置对象
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
//3.获取连接池对象
jedisPool = new JedisPool(jedisPoolConfig,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取Jedis
*/
public static Jedis getJedis() {
return jedisPool.getResource();
}
}