文章目录
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,通过提供多种键值数据类型来适应不同场景下的存储需求。
在开发中,关系型数据库是主数据库,用于存储数据,维护数据关系。 Redis(非关系型数据库)作为辅助数据库,提供数据缓存功能,把某些数据缓存到Redis里,获取资源时,优先从Redis里查找,以此提高性能。
Linux版的Redis
简单使用
- 启动Redis服务:
./redis-server redis.conf - 使用客户端连接Redis服务:
./redis-cli或./redis-cli [-h Redis的ip地址 -p Redis的端口] - 关闭Redis服务:
./redis-cli shutdown
 
Redis的数据类型
redis是一种高级的key-value的存储系统
key:String类型
注:key不要太长,太长会消耗内存还会降低查找效率,长度不要超过1024个字节。
value:支持五种数据类型
-  
字符串(String)
应用场景:缓存(数据查询,商品内容等)
 -  
哈希(hash)
 -  
字符串列表/双向链表(list)
应用场景:任务队列(秒杀、抢购、12306等) -  
字符串集合(set)
应用场景:(数学中的集合运算) 如:共同好友 -  
有序字符串集合(sorted set)
应用场景:排行榜 
Redis的数据操作(待完善)
string类型常用命令
- 设置数据:
set key value - 获取数据:
get key - 删除数据:
del key
 
hash类型常用命令
Redis中的Hash类型可以看成具有String Key(field )和String Value(value)的map容器。
- 设置数据:
hset key field value - 获取数据:
hget key field - 删除数据:
hdel key field 
list类型常用命令
,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和 尾部(right)添加新的元素
- 添加数据:    
- 从左边添加:
lpush key value1 value2... - 从右边添加:
rpush key value value2... 
 - 从左边添加:
 - 弹出数据:    
- 从左边弹出:
lpop key - 从右边弹出:
rpop key 
 - 从左边弹出:
 - 范围查询:
lrange key start end- 查询全部:
lrange key 0 -1 
 - 查询全部:
 
set类型的常用命令
Redis的通用命令(通用的对key的操作)
查询所有key:keys *
 查询my开头的key:keys my*
 查询(如:myset加上一位任意字符)的key:keys myset?
 删除key: del key
 判断key是否存在:exists key:
 获取key对应的value类型:type key
Redis的持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,即持久化。Redis支持两种方式的持久化( RDB持久化,AOF持久化)。使用时可单独使用其中一种或将二者结合使用。
RDB持久化机制
-  
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘,默认开启。
 -  
文件保存位置:默认在Redis的运行目录下(dump.rdb文件)
 -  
什么时候将数据集快照写入磁盘(RDB方式数据持久化时机):
查看 RDB持久化机制的配置(redis.conf)
 
| 配置 | 意义 | 
|---|---|
| save 900 1 | 每900秒(15分钟)至少有1个key发生变化,则dump内存快照 | 
| save 300 10 | 每300秒(5分钟)至少有10个key发生变化,则dump内存快照 | 
注:① dump (备份文件系统)② Dump文件
- RDB持久化机制优点:
性能最大化,相比于AOF机制,如果数据集很大,RDB的启动效率会更高。 - RDB持久化机制缺点:
系统一 旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失,安全性略低。(保证数据的高可用性,即最大限度的避免数据丢失,RDB持久化机制l略有不足) 
AOF持久化机制
-  
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
 -  
开启AOF持久化机制方法:修改redis.conf配置文件
 -  
文件保存位置:默认在Redis的运行目录下(appendonly.aof文件)
开启AOF持久化机制后要关闭服务,再启动服务,才会产生一个appendonly.aof文件
 -  
AOF方式数据持久化时机
查看AOF持久化机制的配置(redis.conf) 
| 配置 | 意义 | 
|---|---|
| appendfsync always | 每执行一次更新命令,持久化一次(同步持久化,每次发生的数据变化都会被立即记录到磁盘中,效率最低) | 
| appendfsync everysec | 每秒钟持久化一次(每秒同步是异步完成的,效率较高) | 
| appendfsync no | 不持久化 | 
- AOF持久化机制优点:安全性高
 - AOF持久化机制缺点:影响性能,还有可能保存大量的冗余命令
 
Jedis的基本使用
Jedis简介:Redis官方提供的Java语言操作Redis数据库的方式
相关jar报包
 
 常用API
- 连接对象:
Jedis- 构造方法:
Jedis(String host, int port)参数host:redis服务器地址,参数port:redis服务端口 - 操作Redis的数据方法:执行的方法名称,和命令名称相同
如:
设置字符串类型的数据set(key,value)
获得字符串类型的数据get(key)
设置哈希类型的数据hset(key,field,value)
获得哈希类型的数据hget(key,field)
…
… - 释放资源:
close() 
 - 构造方法:
 - 连接池配置信息对象:
JedisPoolConfig- 构造方法: 
JedisPoolConfig() - 常用方法:      
setMaxTotal(int maxTotal)setMaxIdle(int maxIdle)
 
 - 构造方法: 
 - 连接池对象:
JedisPool- 构造方法:      
JedisPool(String host, int port)JedisPool(JedisPoolConfig config, String host, int port)
 
 - 构造方法:      
 
扩展: jedis连接池
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
jedis连接池工具类(获取Jedis连接与String类型的数据的增删改查封装)
public class JedisUtils {
    private static JedisPool pool;
    static {
        //读取配置文件,得到配置信息。
        //参数说明:src下的properties文件名称,不要加后缀名。
        ResourceBundle bundle = ResourceBundle.getBundle("jedis");
        String host = bundle.getString("host");
        int port = Integer.parseInt(bundle.getString("port"));
        int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));
        int maxIdle = Integer.parseInt(bundle.getString("maxIdle"));
        //创建连接池配置信息
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大连接数
        config.setMaxTotal(maxTotal);
        //设置最大空闲连接数
        config.setMaxIdle(maxIdle);
        //创建连接池对象
        pool = new JedisPool(config, host, port);
    }
    //获取Jedis连接
    public static Jedis getJedis() {
        return pool.getResource();
    }
    //关闭Jedis连接
    public static void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
    //设置缓存
    public static void setCache(String key, String value){
        Jedis jedis = null;
        try {
            jedis = JedisUtils.getJedis();
            jedis.set(key, value);
        } catch (Exception e) {
            System.out.println("设置缓存数据失败:["+key+":"+value+"]");
        } finally {
            close(jedis);
        }
    }
    //获取缓存
    public static String getCache(String key){
        Jedis jedis = null;
        String value = null;
        try {
            jedis = JedisUtils.getJedis();
            value = jedis.get(key);
        } catch (Exception e) {
            System.out.println("获取缓存失败:" + key);
        } finally {
            close(jedis);
        }
        return value;
    }
    //删除缓存
    public static void delCache(String key){
        Jedis jedis = null;
        try {
            jedis = JedisUtils.getJedis();
            jedis.del(key);
        } catch (Exception e) {
            System.out.println("删除缓存失败");
        } finally {
            close(jedis);
        }
    }
}
  配置文件jedis.properties
host=192.168.184.130
port=6379
maxTotal=20
maxIdle=10

京公网安备 11010502036488号