Redis (nosql型数据库)(非关系型数据库)(键值key-value存储数据库)(单线程,避免了线程安全问题)
底层采用了 IO多路复用(NIO思想)因此性能优秀。
Redis提供了五种数据类型来存储值。
官方命令大全网址:http://www.redis.cn/commands.html
- 字符串类型(String)
- 散列类型(hash)
hash 类型也叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。
- 列表类型(list)
Redis 的列表类型( list 类型)可以 存储一个有序的字符串列表 ,常用的操作是向列表两端添加元素,或者获得列表
的某一个片段。
列表类型内部是使用双向链表( double linked list )实现的,所以向列表两端添加元素的时间复杂度为
0(1) ,获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
- 集合类型(set)
set 类型即集合类型,其中的数据是不重复且没有顺序。
- 有序集合类型(sortedset,zset)
在 set 集合类型的基础上,有序集合类型为集合中的每个元素都 关联一个分数 ,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。
set和zset的相同点
1、二者都是有序的。
2、二者都可以获得某一范围的元素。
set和zset的不同点
1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。
2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。
3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
4、有序集合要比列表类型更耗内存。
Redis的应用场景
内存数据库(登录信息、购物车信息、用户浏览记录等)
缓存服务器(商品数据、广告数据等等)(最多使用)
解决分布式集群架构中的 session 分离问题( session 共享)
任务队列(秒杀、抢购、12306等等)
分布式锁的实现
支持发布订阅的消息模式
应用排行榜(有序集合)
网站访问统计
数据过期处理(可以精确到毫秒)
Java jedis连接redis
1、添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2、连接redis
//单实例连接
@Test
public void testJedis()
{
//创建一个Jedis的连接
Jedis jedis = new Jedis("127.0.0.1", 6379);
//执行redis命令
jedis.set("mytest", "hello world, this is jedis client!");
//从redis中取值
String result = jedis.get("mytest");
//打印结果
System.out.println(result);
//关闭连接
jedis.close();
}
连接池连接
@Test
public void testJedisPool()
{
//创建一连接池对象
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
//从连接池中获得连接
Jedis jedis = jedisPool.getResource();
String result = jedis.get("mytest") ;
System.out.println(result);
//关闭连接
jedis.close();
//关闭连接池
jedisPool.close();
}