Redis的基本概念
redis是一款高性能NOSQL系列的非关系型数据库。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
关系型数据库:mysql、oracle …
非关系型数据库:redis、hbase…
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis:的官网
https://redis.io/
https://www.redis.net.cn/(中文网)
windows:版:
百度网盘https://pan.baidu.com/s/1ICrTY3vyqJR5pCaSBV8IsA
提取码:5c8n
1.直接下载解压
点击运行
2.redis的数据结构
redis的存储都是使用键值对:key value
value有5中数据结构:
字符串:string
哈希类型:hash
列表类型:List
集合类型:set
有序集合类型:sortedset
字符类型(string)
存储:set key value
获取: get key
删除:del key
哈希类型:hash
存储: hset key field value
获取:
hget key field 获取去指定的field
hgetall key 获取key的所有值
删除: hdel key field
列表类型:List
可以添加一个元素到列表的头部(左边)或尾部(右边)
添加:Ipush key value :将元素加入列表左边
rpush key value :将元素加入列表右边
获取:Irange key start end: 范围
删除:Ipop key :删除列表最左边的一个元素,并返回
rpop key:删除列表最右边的一个元素,并返回
集合类型:set (不允许重复)
1.存储:sadd key value
2.获取:smembers key (获取set集合中所有的元素)
3.删除: srem key value (删除set集合中的某个元素)
有序集合类型:sortedset (不许重复,且有序)
存储:zadd key score value
获取: zrange key start end
删除: zrem key value
删除
通用命令
1. keys * (查询所有的键)
2. type key (获取键对应的value值的类型 )
3. del key (删除指定的key value)
redis的持久化
Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数 据恢复。理解掌握持久化机制对于Redis运维非常重要
RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发
修改配制文件: redis.windows.conf
RDB:是redis默认的持久化机制
save 900 1
save 300 10
save 60 10000
AOF:是日志的方式保存,会记录每一条数据到日志文件中(不推荐,对性能影响较大)
# appendfsync always :每一次操作都进行持久化
appendfsync everysec :每隔一秒操作一次持久化
# appendfsync no: 不进行持久化
java的Jedis
Jedis是java操作redis数据库的工具
使用步骤:
1.下载Jedis的jar包
pom:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
@Test
public void test1(){
//获取连接
Jedis jedis =new Jedis("localhost",6379);
//操作
jedis.set("userName","123");
//关闭连接
jedis.close();
}
Jedis连接池
JedisPool对象
使用:
1.创建JedisPool的连接池对象
2.调用getResource()方法获取jedis连接
@Test
public void test2(){
//创建连接池对象
JedisPool jedisPool = new JedisPool();
//获取连接
Jedis resource = jedisPool.getResource();
//操作
resource.set("name","123");
//关闭
resource.close();
}
Jedis连接池工具类
-
jedis.properties
host=127.0.0.1 port=6379 maxTotal=50 maxIdle=10
-
JedisPoolUtils工具类
public class JedisPoolUtils {
private static JedisPool jedisPool;
static {
//读取配制文件
//使用类加载器读取
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties properties = new Properties();
//关联文件
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置JedisPoolConfig中
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setmaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
poolConfig.setmaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
//初始化JedisPool连接池对象
jedisPool = new JedisPool(poolConfig,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
}
/**
* 获取连接的方法
*
*/
public static Jedis getjedis(){
return jedisPool.getResource();
}
}
3.创建连接池
/**
* 创建连接池
*/
@Test
public void test3(){
//通过连接池工具类获取
Jedis getjedis = JedisPoolUtils.getjedis();
//操作
getjedis.set("name","123");
//关闭
getjedis.close();
}