1. 概述
redis是一款高性能的NOSQL系列的非关系型数据库,其存储结构为key-value形式。
1.1 什么是NoSql?
NoSql(Not Only SQL),指非关系型的数据库,是一种新的数据库理念。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
1.1.1 NoSql与关系型数据库比较
优点:
1)nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)nosql的数据存在于缓存中,关系型数据库的数据存储在硬盘上,nosql的数据操作更快速。nosql基于键值对不需要经过sql的解析,性能非常高。
3)nosql的存储格式为key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种形式,而数据库一般存储基本类型,而图片、文档等大文件另存硬盘。
4)nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展;关系型数据库的表与表之间有关联关系的限制导致扩展比较困难。
缺点:
1)不提供对sql的支持,没有统一工业标准,每个nosql产品都是不同的,会产生一定学习和使用成本。
2)不提供关系型数据库对事物的处理
总结:
1.2 常见NoSql产品
1.2.1 键值存储数据库
1.2.2 列存储数据库
1.2.3 文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
1.2.4 图形数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
1.3 Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据
redis有5中数据类型:
- 字符串类型:string
- 哈希类型:hash
- 列表类型:list
- 集合类型:set
- 有序集合类型:zset(sortedset)
1.3.1 redis的应用场景
- 缓存(数据查询、短连接、新闻内容等等)
- 聊天室的在线好友列表
- 任务队列(秒杀、抢购等)
- 排行榜
- 访问统计
- 数据过期处理(可以精确到ms)
- 分布式集群的session分离
2. 下载安装
3.命令操作
作为一个java开发者自然要在ide中操作,可以使用jedis(下文介绍),但是基本的命令还是要会的。
redis的命令是针对每种数据类型的,它的key-value格式中,key是字符串,value是上述5中数据类型。
3.1 字符串类型 string
存储:set key value
获取:get key
删除:del key
3.2 哈希类型 hash (每个值相当于一个Map)
存储:hset key field value
field value为hash中的键值对,field是唯一的
获取:hget key field
删除 hdel key field
3.3 列表类型 list (双向链表相当于LinkedList)
可以进行两端操作
存储:lpush key value 从左侧插入
rpush key value 从右侧插入
获取:lrange key start end 范围获取从0开始
lrange key 0 -1 可以获取所有元素
删除:lpop key rpop key
3.4 集合类型 set 无重复元素
存储: sadd key value
获取: smember key 获取set集合中所有元素
删除:srem key value : 删除set集合中的某个元素
3.5 有序集合类型 zset 无重复元素,通过double类型的分数按从小到大自动排序
存储:zset key score value
获取:zrange key start end [withscores] 带上withscores可以显示分数
删除:zrem key value
3.6 通用命令
查询所有键:keys *
获取键对应的value类型:type key
删除指定的key-value:del key
除了上述命令外还有其他很多操作,自行查阅文档学习即可。
4.持久化
redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
1. RDB:默认方式,不需要进行配置,默认就使用这种机制
5. Jedis
Jedis是一款用java操作redis的工具
引入jar依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.0</version> </dependency>
使用步骤:
//连接 Jedis j = new Jedis("localhost", 6379);
//Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//操作 j.set("uname", "123456"); System.out.println(j.get("uname"));; //关闭 j.close();
使用jedis的操作命令与用redis客户端的操作命令格式是相同的。