Redis

来源:互联网 发布:java ireport 打印 编辑:程序博客网 时间:2024/06/15 20:43

Redis简介

Redis 是什么,能做什么

Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。(摘自 Redis 官网)

作为内存数据库,在现代互联网 web 系统中,还是主要将 Redis 作为缓存使用。大型互联网 Web 系统对性能要求很高,而在前端和数据层之间增加数据缓存已成为必不可少的手段之一,当前比较流行的两个技术就是 Redis 和 Memcached。

Redis安装

Redis支持语言

Redis 支持的语言很多,在此我们以 Java 语言的客户端 Jedis 做一个简单用例。

Redis与Java(Jedis)

pom.xml

<!-- redis 客户端:Jedis --><dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>2.7.3</version></dependency>

RedisCache.java

package com.lee.dao.cache;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class RedisCache {    // 相当于数据库连接池    private JedisPool jedisPool;    public RedisCache(String ip, int port) {        jedisPool = new JedisPool(ip, port);    }    public Data getData(int dataId) {        Data data = null;        try {            Jedis jedis = jedisPool.getResource();            try {                String key = "data:" + dataId;                byte[] bytes = jedis.get(key.getBytes());                // 缓存里重获取到                if (null != bytes) {                    // ByteArray to Object                    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);                    ObjectInputStream ois = new ObjectInputStream(bais);                    data = (Data) ois.readObject();                    ois.close();                    bais.close();                }            } catch (Exception e) {                e.printStackTrace();            }        } catch (Exception e) {            e.printStackTrace();        }        return data;    }    public String putData(Data data) {        String result = null;        try {            Jedis jedis = jedisPool.getResource();            try {                String key = "data:" + data.getId();                // 对象序列化                ByteArrayOutputStream baos = new ByteArrayOutputStream();                ObjectOutputStream oos = new ObjectOutputStream(baos);                oos.writeObject(data);                byte[] bytes = baos.toByteArray();                // 设置过期时间                int timeout = 60 * 60;  // 一小时                result = jedis.setex(key.getBytes(), timeout, bytes);            } catch (Exception e) {                e.printStackTrace();            }        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    public static void main(String[] args) {        // 使用 Java 客户端 Jedis 连接 Redis        RedisCache rc = new RedisCache("192.168.199.6", 6379);        // 缓存数据到 Redis 服务器        Data data = new Data(1, "test");        rc.putData(data);        // 从 Redis 服务器获取数据        Data target = rc.getData(1);        System.out.println(target);    }}

服务器缓存

使用 redis-cli 客户端连接获取缓存数据

Redis缓存

0 0