关系数据库的特点:
1 数据之间有关系
2 数据存储在硬盘的文件上
非关系数据库(NOSQL),redis,hbase…的特点:
1 存储格式:key:value
name:zhangsan
age:23
1 数据之间没有关联关系
2 数据存储在内存中。
使用:
1 下载安装:在redis的中文网下载 www.redis.net.cn
2 安装:
解压直接可以使用:
1 redis.window.conf:配置文件
2 redis.cli.exe:redis的客户端
3 redis-server.exe:redis服务器端
3 命令操作:
redis存储的是: key,value格式的数据结构,其中key都是字符串,value有5种不同的数据结构。
value的数据结构:
1 字符串类型:string
2 哈希类型 hash:map格式
3 列表类型 list:linkedlist格式
4集合类型:set 不可重复
5 有序集合类型 sortedset
2 字符串类型 string
1 存储:set key value
2 获取: get key
3 删除: del key
哈希类型 hash
1存储:hset key field value
2 获取:
hget key field:获取指定的field对应的值
hgetall key:获取所有的field和value
3 删除: hdel key field.
4 列表类型 list:可以添加一个元素到列表的头部(左边) 或者尾部(右边)
1 添加:
1 lpush key value:将元素加入列表左边
2 rpush key value:将元素加入列表右边。
2 获取:
lrange key start end:范围获取
3 删除:
1 lpop key:删除列表最左边的元素,并将元素返回
2 rpop key:删除列表最右边的元素,并将元素返回。
zrem key value
7 通用命令:
1 key * :查询所有的键
2 type key:获取键对应的value的类型
3 del key:删除指定的key value
5 集合类型 set: 不允许重复元素
1存储: sadd key value
2 获取:smembers key:获取set集合中多有的元素
3 删除:srem key value:删除set集合中的某个元素
6 有序集合类型 sortedset:不允许重复元素,且元素有顺序
1 存储:zadd key score value:zadd mysort 60 张三
2 获取: zrange key start end: zrange mysort 0 -1 获取全部,
zrange mysort 0 -1 withscores 拿出分数
3 删除: zrem key value:zrem mysort lisi 删除lisi的信息
4 持久化
1 redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
2redis 持久化机制:
1 RDB:默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔时间中,检测key的变化情况,然后持久化数据
1 编辑redis.windwos.conf文件
注释:after 900 sec (15 min) if at least 1 key changed
save 900 1
注释: after 300 sec (5 min) if at least 10 keys changed
save 300 10
注释: after 60 sec if at least 10000 keys changed
save 60 10000
注意:这时需要用命令行的方式打开redis 例如:
redis-server.exe redis.windows.conf
在目录的一个dump.rdb的文件中备份了数据。
然后点击启动客户端
2 重新
2 AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。
1 编辑redis.windwos.conf文件
appendonly no(默认,关闭aof) —> appendonly yes(开启aof)
# appendfsync always:每一次操作都进行持久化
appendfsync everysec:每隔一秒进行一次持久化
# appendfsync no:不进行持久化。
redis-server.exe redis windows.conf 启动服务器
会生成appendonly.aof的文件,用来备份数据。
java客户端 Jedis
Jedis:一款java操作redis数据库的工具
使用步骤:
1 下载jedis的jar包: commons-pool2-2.3.jar jedis-2.7.0jar
例如:
使用:1 获取链接(Jedis jedis=new Jedis("localhost’’,6379)) /如果使用空构造,默认值是: “localhost” 6379.
2 操作:存入一个值:jedis.set(“username”,“zhangsan”);
3 关闭连接:jedis.close();
jedis操作各种redis中的数据结构
1 字符串类型 String
客户端的命令:set get
2 哈希类型 hash:map格式
hset hget
3 列表类型 list: linkedlist格式。支持重复元素
lpush/rpush
lpop/rpop
4 集合类型 set : 不允许重复元素
sadd
5 有序集合类型 sortedset:不允允许重复元素,且元素有顺序。
zadd
方法:
String类型的:
1 可以使用setex()方法存储可以指定过期时间的key value
jedis.setex(“activecode”,20,"hehe’’)//将activecode: hehe 键值对存入redis,并且20秒后自动删除该键值对。可以用来存放有失效的激活码。
2哈希类型 hash : map格式
hset:
存储hash
jedis.hset(“user”,"name’’,“lisi”);
jedis.hset(“user”,"age’’,"23’’);
jedis.hset(“user”,“gender”,“male”);
获取:
jedis.get(“user’’,’'name”);
获取hash的所有map中的数据
Map< String,String> user=jedis.hgetAll(“user”);
//通过keyset的方式遍历Map集合
for(String key : keySet){
//获取value
String value=user.get(key);
System.out.println(key + “:”+value);
hget
hgetAll
列表类型 list : linkedlist格式。支持重复元素
lpush / rpush
lpop / rpop
lrange start end : 范围获取
list存储
jedis.lpush(“mylist” ,“s”,“b”,“c”);//从左边存
jedis.rpush("mylist’’ , “a”,“b”,“c”);//从右边存
list 范围获取
List< String> mylist=jedis.lrange(“mylist”,0,-1);//获取所有值
list 弹出
jedis.lpop(“mylist”);//从左边弹
jedis.rpop(“mylist”);//从右边弹。
4 集合类型 set: 不允许重复元素
sadd
set 存储: jedis.sadd("myset’’,“java”,“php”,“c++’’)
smembers:获取所有元素
Set< String> myset=jedis.smembers(“myset”);
5 有序集合类型 sortedset:不允许重复元素,且元素有顺序。
sortedset存储:
jedis.zadd(“mysortedset”,3,“亚瑟”);
jedis.zadd(“mysortedset”,30,“后裔“);
jedis.zadd(“mysortedset”,25,“孙悟空”);
Set< String> mysortedset=jedis.zrange(” mysortedset”,0,-1);//获取所有元素
jedis连接池: jedispool
使用:
0 创建一个配置对象
jedisPoolConfig config=new JedisPoolConfig(); 创建一个配置对象
config.setMaxTotal(50);//最大允许的连接数
config.setMaxIdle(10);//最大空闲连接
1 创建jedispool连接池对象
jedispool jedispool=new jedispool(config,"localhost’’,6379);//创建jedis连接对象
2 调用方法 getResource()方法获取jedis连接
jedis jedis=jedisPool.getResource();//获取链接
3 使用
jedis.set(“username”,“哪吒”);
4 关闭,归还到连接池中
jedis.close();
抽取配置文件:
/
jedisPool工具类
加载配置文件,配置连接池的参数
提供获取链接的方法
将jedis的配置文件.properties放到src下面
public class jedisPoolUtils{
private static JedisPool jedisPool;
/
获取连接方法
*/
//读取配置文件,创建一个静态代码块,当类加载的之后就读取
static{
//读取配置文件
InputStream is=JedisPoolUtils.class.getClassLoader().getResourceAsStream(“jedis.properties”);
//创建Properties对象
Properties pro=new Properties();
//关联文件
pro.load(is);
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(Integer.paseInt(pro.getProperty(“maxTotal”)));
config.setMaxIdle(Integer.paseInt(pro.getProperty(“maxIdle”)));
//初始化JedisPool
jedisPool=new JedisPool(config,pro.getProperty(“host”),Integer.parseInt(pro.getProperty(“post”)));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}