Java学习日记之Redis
Redis
一、概念
redis是一款高性能的NOSQL的非关系型数据库
二、下载安装
1.官网:https://redis.io
2.中文网:https://www.redis.net.cn
3.解压后可直接使用:
* redis.windows.conf:配置文件
* redis-cli.exe:redis的客户端
* redis-server.exe:redis的服务器端
三、命令操作
1.redis的数据结构:
* redis存储的是key,value格式的数据,其中key都是字符串,value有五种不同的数据类型
* 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
127.0.0.1:6379> set usename zhangsan OK 127.0.0.1:6379> get usename "zhangsan" 127.0.0.1:6379> set pwd 123 OK 127.0.0.1:6379> get pwd "123" 127.0.0.1:6379> del pwd (integer) 1 127.0.0.1:6379> get pwd (nil) //表示为空
3.哈希类型 hash
1) 存储:hset key field value
2) 获取:
* hget key field:获取指定的field对应的值
* hgetall key :获取所有的field和value
3) 删除:hdel key field
127.0.0.1:6379> hset myHash username zhangsan (integer) 1 127.0.0.1:6379> hset myHash username lisi (integer) 0 127.0.0.1:6379> hset myHash pwd 123 (integer) 1 127.0.0.1:6379> hget myHash pwd "123" 127.0.0.1:6379> 127.0.0.1:6379> hdel myHash username (integer) 1 127.0.0.1:6379> hget myHash username (nil)
4.列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
1) 存储:
*lpush key value:将元素加入列表左边
*rpush key value:将元素加入列表右边
2) 获取:
* lrange key start end:范围获取[ 获取所有:0 -1 (-1代表最后一个、-2代表倒数第二个,以此类推) ]
3) 删除:
*lpop key :删除列表最左边的元素,并将该删除的元素返回
*rpop key :删除列表最右边的元素,并将该删除的元素返回
127.0.0.1:6379> lpush myList a (integer) 1 127.0.0.1:6379> lpush myList b a (integer) 3 127.0.0.1:6379> rpush myList c (integer) 4 127.0.0.1:6379> lrange myList 0 -1 1) "a" 2) "b" 3) "a" 4) "c" 127.0.0.1:6379> rpop myList "c" 127.0.0.1:6379> lpop myList "a" 127.0.0.1:6379> lrange myList 0 -1 1) "b" 2) "a" 127.0.0.1:6379> llen myList (integer) 2
5.哈希类型 set:不允许重复元素
1) 存储:sadd key value
2) 获取:smembers key:获取set集合中所有元素
3) 删除:srem key value:删除set集合中的某个元素
127.0.0.1:6379> sadd mySort a b c (integer) 3 127.0.0.1:6379> smembers mySort 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> sadd mySort cc ss (integer) 2 127.0.0.1:6379> smembers mySort 1) "c" 2) "b" 3) "a" 4) "cc" 5) "ss" 127.0.0.1:6379> srem mySort ss (integer) 1 127.0.0.1:6379> smembers mySort 1) "cc" 2) "a" 3) "b" 4) "c" 127.0.0.1:6379> srem mySort b (integer) 1 127.0.0.1:6379> smembers mySort //更改后再次查询顺序也随之改变 1) "a" 2) "c" 3) "cc"
6.哈希类型 sortedset:不允许重复元素,且元素有顺序
1) 存储:zadd key score value
2) 获取:zrange key start end
3) 删除:zrem key value
127.0.0.1:6379> zadd mySet 1 one (integer) 1 127.0.0.1:6379> zadd mySet 2 two (integer) 1 127.0.0.1:6379> zadd mySet 3 three (integer) 1 127.0.0.1:6379> zrange mySet 0 -1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> zadd mySet 0 zore (integer) 1 127.0.0.1:6379> zrange mySet 0 -1 1) "zore" 2) "one" 3) "two" 4) "three" 127.0.0.1:6379> zrem mySet one (integer) 1 127.0.0.1:6379> zrange mySet 0 -1 1) "zore" 2) "two" 3) "three" 127.0.0.1:6379> zrange mySet 0 -1 withscores 1) "zore" 2) "0" 3) "two" 4) "2" 5) "three" 6) "3"
7.通用命令
1) keys *:查询所有的键
2) type key:获取键对应的value的类型
3) del key:删除指定的key value
四、持久化
1.redis是一个内存数据库
当redis服务器重启,或者电脑重启,数据会丢失。我们可以将redis内存中的数据持久化保存到硬盘中。
2.redis持久化机制
1)RDB:默认方式(可能会丢失数据)
* 在一定的间隔时间中,检测key的变化情况,然后持久化数据
1. 编辑 redis.windows.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 10 1
2. 在命令行中输入 redis-server.exe redis.windows.conf 打开服务器端(持久化将会创建 dump.rdb 文件记录)
3.重启redis服务器,查看持久化的数据
2)AOF:(影响性能)
* 日志方式的记录,可以记录每一条命令的操作。在每一次命令操作后,持久化数据
1. 编辑 redis.windows.conf
appendonly no(关闭aof状态) --> appendonly yes(打开aof状态)
# appendfsync always:每一次操作都进行持久化
appendfsync everysec:每隔一秒进行一次持久化
# appendfsync no:不进行持久化
2. 在命令行中输入 redis-server.exe redis.windows.conf 打开服务器端(持久化将会创建 appendonly.aof 文件记录)
3.重启redis服务器,查看持久化的数据
五、Java客户端 Jedis
* Jedis:一款Java操作redis数据库的工具
* 使用步骤
1. 下载jedis的jar包
commons-pool2-2.3.jar
jedis-2.7.0.jar
2. 使用
* Jedis jedis = new Jedis("localhost", 6379); //创建Jedis对象
或 Jedis jedis = new Jedis(); //调用空构造器 默认 host:localhost, port:6379
* 调用Jedis对象中的方法(方法名称和五种数据类型的命令操作一致)
以存储为例:
String:jedis.set("name","zhangsan");
Hash:jedis.hset("user","uname","zs");
List:jedis.lpush("mylist","a","b","c");
Set:jedis.sadd("myset","a","b");
SortedSet:jedis.zadd("mySortedSet",90,"zs");
* jedis连接池:JedisPool
*使用:
0.创建一个配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
//根据要求配置连接池的属性
poolConfig.setMaxTotal(50);
poolConfig.setMaxIdle(10);
//将配置完的poolConfig加到