Redis数据库简单学习
redis是一款高性能的NOSQL系列的非关系型数据库(key-value)
一、非关系型数据库
1. 特点
- 数据之间没有关联关系
- 数据存储在内存中
2. 解决的问题
- 经常查询的一些不会经常发生变化的数据
- 缓存思想
- 若缓存中存在,则直接从缓存数据库中查询数据并返回
- 若缓存中不存在,则到关系型数据库中查询,将查询到的结果放入缓存并返回
- 缓存思想
二、Redis数据库
1. 下载
- 注意:官网并不支持下载Windows版本的Redis,所以微软出面制作了Windows版本的Redis,但是自16年开始更新到版本3.2.100就不在更新了,无奈,一群自愿者出来开始更新Windows版本的Redis
- 微软的:https://github.com/microsoftarchive/redis
- 自愿者的:https://github.com/tporadowski/redis
2. 安装
- 下载zip压缩包,解压即可使用
3. 配置
redis.windows.conf
:Redis的核心配置文件redis-cli.exe
:Redis的客户端redis-server.exe
:Redis的服务端
4. 使用
- 双击
redis-server.exe
运行服务端
- 双击
redis-cli.exe
运行客户端
5. Redis的学习
- Redis数据结构
- key-value格式的数据
- key都是字符串
- value有5种不同的数据结构
- 字符串类型:string(String)
- 哈希类型:hash(map)
- 列表类型:list(linkedlist)
- 集合类型:set(无重复值)
- 有序集合类型:sortedset(有序且无重复值)
- key-value格式的数据
6. 字符串类型
- 存储:
set key value
- 获取:
get key
- 删除:
del key
7. 哈希类型
- 存储:
hset key field value
- 获取:
hget key field
hgetall key
- 删除:
hdel key field
8. 列表类型(可重复)
- 可以添加一个元素到列表的头部或者尾部
- 添加
lpush key value
:将元素加到列表头部rpush key value
:将元素加到列表尾部
- 获取
lrange key start end
:获取范围内的列表元素lrange key 0 -1
:获取列表中所有元素
- 删除
lpop key
:从列表的头部删除元素,并将元素返回rpop key
:从列表的尾部删除元素,并将元素返回
9. 集合类型(无重复)
- 存储:
sadd key value
- 获取:
smembers key
:获取set集合中所有元素 - 删除:
srem key value
:删除set集合中的某个元素
10. 有序集合类型(有序无重复)
-
每个value对应一个double类型的浮点数,有序集合正是通过这个浮点数保证有序的
-
存储:
zadd key score value
-
获取:
zrange key start end
zrange key 0 -1 withscores
-
删除:
zrem key value
11. 通用命令
- 查询所有的键:
key *
- 查询指定键对应value的类型:
type key
- 删除指定的key-value:
del key
12. 持久化
-
将内存中的数据存储到本地,就叫持久化数据
-
Redis持久化机制
- RDB:默认方式,不需要配置,默认就使用这种机制
- 在一定时间间隔中,检测key的变化情况,然后持久化数据
- AOF:日志记录的方式,可以记录每一条命令的操作,可以在每一次命令操作后,持久化数据
- RDB:默认方式,不需要配置,默认就使用这种机制
-
配置文件
redis.windows.conf
-
RDB配置
- 修改以下配置文件项
save 900 1 # after 900 sec (15 min) if at least 1 key changed save 300 10 # after 300 sec (5 min) if at least 10 keys changed save 60 10000 # after 60 sec if at least 10000 keys changed
- 重新启动 Redis,并指定配置文件:
redis-server.exe redis.windows.conf
-
AOF配置
- 修改以下配置文件项
appendonly no # 关闭AOF appendonly yes # 开启AOF appendfsync always # 每一次操作都进行持久化 appendfsync everysec # 每隔一秒进行一次持久化 appendfsync no # 不进行持久化
- 重新启动Redis,并指定配置文件:
redis-server.exe redis.windows.conf
-
三、Java操作Redis
1. Jedis
- 导入maven依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
- 代码实现
public class JedisDemo1 {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost",6379);
jedis.set("password","123456");
jedis.close();
}
}
- 前往客户端查看
keys *
,可以看到password的key和值
2. Jedis操作5种Redis数据结构
- 操作String类型
public class JedisDemo1 {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost",6379);
//操作String类型(String)
jedis.set("password","123456");
//操作哈希类型(HashMap)
HashMap<String, String> hashmap = new HashMap<String, String>();
hashmap.put("name","zhangsan");
hashmap.put("age","69");
hashmap.put("gender","male");
jedis.hset("hashmap",hashmap);
//操作列表类型(list)
jedis.lpush("listB","a");
jedis.lpush("listB","b");
jedis.rpush("listB","c");
//操作Set集合(set)
jedis.sadd("set","a");
jedis.sadd("set","b");
//操作有序集合(SortedSet)
jedis.zadd("zset",99,"zhangsan");
jedis.zadd("zset",69,"lisi");
jedis.zadd("zset",66,"wangwu");
jedis.close();
}
}
3. String类型常用方法
setex(String key,int second,String value)
:增加字符串数据项并指定过期时间set(String key,String value)
:增加字符串数据项(覆盖,已存在覆盖值)setnx(String key,String value)
:增加字符串数据项(不覆盖,若已存在则不执行)del(String key)
:删除指定键的字符串数据项get(String key)
:获取指定键的字符串数据项的值append(String key,String s)
:在指定键的字符串数据项的value后追加字符串mset(String key1,String value1,String key2,String value2...)
:增加多条字符串数据项mget(String key1,String key2...)
:获取指定键对应的多条数据项
4. Hash类型常用方法
hset(String key,String key,String value)
:增加指定键的hash数据项hset(String key,Map map)
:增加指定键对应的值加入hash数据项hgetAll(String key)
:获取指定键对应的hash数据项hkeys(String key)
:获取指定键对应的hash数据项的所有键hvals(String key)
:获取指定键对应的hash数据项的所有值hdel(String key,String k1,String k2...)
:从指定键对应的hash数据项中删除多个元素hlen(String key)
:获取指定键对应的hash数据项的元素个数hexists(String key,String k1)
:判断指定键对应的hash数据相中是否存在k1对应的元素
5. List类型常用方法
lpush(String key,String v1,String v2...)
:从list头部插入元素rpush(String key,String v1,String v2...)
:从list尾部插入元素lrange(String key,int start,int end)
:获取指定区间的list元素lrem(String key,int n,String value)
:lpop(String key)
:从list头部弹出一个元素rpop(String key)
:从list尾部弹出一个元素llen(String key)
:获取list的元素个数lset(String key,int index,String value)
:修改list中指定索引处的值
6. Set类型常用方法
sadd(String key,String v1,Stirng v2...)
:增加指定键对应的set数据项smembers(String key)
:获取指定键对应的set数据项的所有元素srem(String key,String val)
:删除set中值为val的数据项srem(String key,String v1,String v2...)
:删除set中值为v1,v2的数据项、spop(String key)
:随机弹出set中一个元素scard(String key)
:获取set集合的元素个数
7. SortedSet类型常用方法
zadd(String key,Map map)
:增加指定件对应的zset数据项zadd(String key,int score,int val)
:向zset中加入一个元素zrange(String key,int start,int end)
:获取zset指定区间的元素值zrangeWithScore(String key,int start,int end)
:获取zset指定区间的元素值和scorezrangeByScore(String key,int start,int end)
zrem(String key,String vlaue)
:删除zset例指定值的元素zcard(String key)
:获取zset中元素的个数
四、Jedis连接池
1. JedisPool
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
config.setMaxWaitMillis(3000);
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis = jedisPool.getResource();
jedis.set("key","value");
jedis.close();
2. JedisPool工具类
package com.zhiyuan.jedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.util.Properties;
public class JedisPoolUtils {
private static JedisPool jedisPool;
private JedisPoolUtils(){}
static{
Properties pros = new Properties();
try {
pros.load(JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties"));
String host = pros.getProperty("Host");
String port = pros.getProperty("Port");
String maxTotal = pros.getProperty("MaxTotal");
String maxIdle = pros.getProperty("MaxIdle");
String maxWaitMillis = pros.getProperty("MaxWaitMillis");
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(Integer.parseInt(maxIdle));
config.setMaxTotal(Integer.parseInt(maxTotal));
config.setMaxWaitMillis(Integer.parseInt(maxWaitMillis));
jedisPool = new JedisPool(config,host, Integer.parseInt(port));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
Host=localhost
Port=6379
MaxTotal=50
MaxIdle=10
MaxWaitMillis=3000
原文作者:絷缘
作者邮箱:zhiyuanworkemail@163.com
原文地址:https://zhiyuandnc.github.io/WvJdcATYk/
版权声明:本文为博主原创文章,转载请注明原文链接作者信息