redis
1.redis概述
redis是一款高性能的NOSQL系列的非关系型数据库
2.什么是NOSQL
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
3.什么是redis?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis 的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色,Redis的官网: https://redis.io/
4.redis的特性
Redis 与其他 key - value 缓存产品有以下三个特点:
①、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
②、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
③、Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势:
①、性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
②、丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
③、原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
④、丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
总结:
关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,
让NoSQL数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
2.内容介绍
1.命令操作
1. redis的数据结构:
* redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
* value的数据结构:
1) 字符串类型 string
2) 哈希类型 hash : map格式
3) 列表类型 list : linkedlist格式。支持重复元素
4) 集合类型 set : 不允许重复元素
5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
使用redis存取String类型的值:
SET key value 保存一个值 key表示字符串的名称,value表示值
保存复杂的字符串value是使用引号: set msg "hello word"
get key 获取一个值
MSET key value [key value ...] 保存多个值
MGET key [key ...] 获取多个值
APPEND key value 在原有的字符串上追加一段内容
使用redis往list集合中存取值:
LPUSH key value [value ...] 向集合的头部保存一个值 key表示集合名称
LRANGE key start stop lrange list01 0 -1 获取集合中所有的值
LPOP key 从左边弹出集合头部元素
RPOP key 从右边弹出头部元素
LREM key count value 移除指定count个数的value值
LINDEX key index 根据索引获取值
使用redis往map集合中存取值
HSET key field value 向map中保存一个值,key表示map集合名称,field表示map集合中的key
HGET key field 根据键获取一个值
HDEL key field 根据键删除一个值
HMSET key field value [field value ...] 保存多个值
HMGET key field [field ...] 获取多个值
HGETALL key 获取所有的key和value值
HLEN key 获取所有map集合的长度
往set集合中存数据(不会存重复的数据)
sadd key value1 value2 .... 添加一个或者多个数据
srem key value1 value2 ... 删除一个获取多个数据
smembers key 获取set集合中所有元素
sismember key value 判断成员元素是否是集合的成员
往有序set集合中存数据(不会存重复的数据,会根据分数排序)
zadd key score value1 score value2 .....添加一个或者多个元素
zrange key start stop [WITHSCORES] 从分数从小往大排序
zrevrange key start stop [WITHSCORES] 从分数从大往小排序
zrem key member 删除元素
**其他操作:获取所有的key :keys **
删除指定的key : del username; 删除username
查看所有的key : keys *
查看key对应value的类型: type key
3.JedisUtils工具类编写
/**
* JedisPool工具类
* 加载配置文件,配置连接池的参数
* 提供获取连接的方法
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties
Properties pro = new Properties();
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}