-
概念: redis是一款高性能的NOSQL系列的非关系型数据库
-
安装:
官网地址:https://redis.io/
中文官网地址:https://www.redis.net.cn/
解压直接可以使用︰
redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端
有些电脑会出现问题
1启动服务器端闪退,启动客户端:
[问题:Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接]
解决:在redis根目录下打开命令行窗口,输入命令redis-server.exe redis.windows.conf后,不要关闭本窗口。
[问题:redis-server.exe闪退问题报错QForkMasterInit: system error caught. error code=0x000005af, message=Virtual]
解决:说明你没有设置redis的最大内存,用记事本打开redis.windows.conf最后一行加上下方代码即可。
maxmemory 268435456
maxheap 314572800 -
Redis添加至windows服务:
安装服务:redis-server --service-install redis.windows.conf --loglevel verbose
其中参数 --loglevel verbose表示记录日志等级
卸载服务:redis-server --service-uninstall
-
设置密码:
打开redis.windows.conf文件,找到“requirepass”配置项,此处设置redis密码,如果不需要密码,可以将该配置项注释掉。配置完成后,保存文件。 -
命今操作:
- redis的数据结构∶
redis存储的是:key,value格式的数据,其中key都是字符串
value有5种不同的数据结构:
变量名|真实类型|作用
:-:|:-:|:-:
- redis的数据结构∶
value类型 | 对应命令 | 数据格式 |
---|---|---|
字符串类型 string |
存储:set key value 获取∶get key 删除: del key
|
张三 |
哈希类型 hash |
存储: hset key field value 获取: hget key field 获取所有的field和value:hget all key 删除:hdel key field
|
|
列表类型 list | 左添加先加a,后加b,b在a的左边, 右添加c,c在列表 的最右边 1.将元素加入列表左表:lpush key value 2.将元素加入列表右边:rpush key value 范围获取:lrange key start end 删除并返回最左边的元素:lpop key 删除并返回最右边的元素:rpop key
|
可重复 |
集合类型 set |
存储: sadd key value 获取set集合中所有元素:smembers key 删除set集合中的某个元素:srem key value |
不可重复,没有顺序 |
有序集合类型 sorted set |
存储:zadd key score value 获取:zrange key start end 删除∶zren key value
|
不可重复,通过 score 可排序 |
通用命今:
keys *:查询所有的键
type key:获取键对应的value的类型
del key:删除指定的key value
-
持久化
-
redis是一个内存数据库,当redis服务器重后,或重启电脑,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
-
redis持久化机制:
1. RDB:默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔时间中,检测key的变化情况,然后持久化数据步骤:可改变此配置文件的值:
1,编辑redis.windwos.conf文件
900秒【15分钟】内有1次数据改变持久化数据
save 900 1
300秒【5分钟】内有10次数据改变持久化数据
save 300 10
60秒【1分钟】内有10000次数据改变持久化数据
save 60 10000
2,重新启动redis服务器,并指定配置文件名称
D:\Javaweb2018\day23_redis\资料\redis\windows-64 (redis-2.8.9>redis- server.exe redis.windows.conf- AOF:日志记录的方式,可以记录每一条命今的操作。可以每一次命分操作后,持久化数据
1,编辑redis.windwos.conf文件
appendonly no (关闭aof)--> appendonly yes(开启aof)
appendfsync always 每一次操作都进行持久化
appendfsync everysec 每隔一秒进行一次持久化
appendfsync nb 不进行持久化
2,重新启动redis服务器,并指定配置文件名称
D:\Javaweb2018\day23_redis\资料\redis\windows-64 (redis-2.8.9>redis-
server.exe redis.windows.conf
-
Java客户端Jedis
- jedis:一款java操作redis数据库的工具.
-
使用步骤:
1.下载jedis的jar包
2.使用
public class JedisTest {
/**
* 快速入门
*/
@Test
public void test01(){
//1创建连接对象
Jedis jedis = new Jedis("localhost",6379);
//2操作
jedis.set("username","zhangsan");
//3关闭连接
jedis.close();
}
}
-
jedis操作redis各种数据类型
- string
//1.获取连接 Jedis jedis = new Jedis();//如果使用空参构造,默认值"localhost",6379端口 //2.操作 //存储 jedis.set( "username" , "zhangsan");//获取 String username = jedis.get( "username" ); system.out.println(username) ; //可以使用setex()方法存储可以指定过期时间的key value jedis.setex( "activecode" , 20,"hehe");//将activecode: hehe键值对存入redis,并且zo秒后自动删除该键值对
- hash
//2.操作//存储hash jedis.hset( "user" , "name" , "lisi"); jedis.hset( "user" , "age" , "23"); jedis.hset( "user" , "gender" , "male"); //获取hash String name = jedis.hget( "user",f"name " ); system.out.println(name) ; //获取hash的所有map中的数据 Map<String,String> user = jedis.hgetAll( "user" ); // keyset Set<String> keySet = user.keySet( ); for (string key : keySet) { //获取value String value = user.get( key ) ; system. out- println(key “:" +.value) ; }
- list
//2.操作l/ list存储 jedis.lpush( "mylist" , "a" , "b", "c");//从左边存 jedis.rpush( "mylist" , "a" , "b","c");//从右边存 //list范围获取 List<String> mylist = jedis.lrange( "mylist", 0,end: -1); system.out.println(mylist); // list 弹出 String element1 = jedis.lpop( "mylist" ); system.out.println(element1); String element2 = jedis.rpop( "mylist"); system.out.println(element2); //list范围获取 List<String> mylist2 = jedis.lrange("mylist",0,-1); system.out.println(mylist2);
- set
//set存储 jedis.sadd( "myset", "java" , "php" , "c++" ) ; //set获取 set<String> myset = jedis.smembers("myset" ); system.out.println( myset);
- sortedset
//2.操作 //sortedset存储 jedis.zadd( "mysortedset" , 3,"亚瑟"); jedis.zadd( "mysortedset" , 30,"后商"); jedis.zadd( "mysortedset" , 25,"孙悟空"); // sortedset获取 Set<String> mysortedset = jedis.zrange( "mysortedset",0,end: -1);
Jedis连接池对象
/**
* redis连接池redisPool快速入门
*/
@Test
public void test02(){
//0创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1创建连接池对象
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
//2连接池对象连接对象
Jedis jdResource = jedisPool.getResource();
//3使用方法
jdResource.set("names","xiaoming");
//归还数据库连接池连接
jdResource.close();
}
- jedis连接池详细配置:
最大活动对象数
redis.pool.maxTotal=1000
最大能够保持idel状态的对象数
redis.pool.maxIdle=100
最小能够保持idel状态的对象数
redis.pool.minIdle=50
当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true
对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50
redis服务器的IP
redis.ip=xxxxxx
redis服务器的Port
redis.port=6379
-
Jedis工具类
如果出现空指针异常,找不到properties文件,则必须把配置文件放到resource内。
工具类:
public class JedisUtil {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisUtil.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
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
测试:
/**
* 通过redis连接池工具获取连接
*/
@Test
public void test03(){
Jedis jdResource = JedisUtil.getJedis();
//3使用方法
jdResource.set("names","zhangsan");
//归还数据库连接池连接
jdResource.close();
}
}
网友评论