什么是redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求(非关系型的、分布式的、开源的。水平可扩展的)。
优点:
对数据高并发读写
对海量数据的高效率存储和访问
对数据的可扩展性和高可用性
缺点:
redis (对事务的处理非常简单)
无法做到太复杂的关系数据库模型
Redis是以key-value store 存储,data structure service 数据结构服务器。键可以包含:(string)字符串,哈希,(list)链表,(set)集合,(zset)有序集合。这些数据集合都支持push/pop、add/remove及取交集和并集以及更丰富的操作,redis支持各种不同的方式排序,为了保证效率,数据都是缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加到文件记。
redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最常见的应用场景)
分布式集群架构中的session分离。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
Redis的安装
redis是C语言开发, 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc,安装命令是:yum install gcc-c++
1、redis下载:http://download.redis.io/releases/redis-3.2.8.tar.gz
2、将redis-3.2.8.tar.gz拷贝到/home目录下
3、解压: tar -zxvf redis-3.2.8.tar.gz
4、进入解压后的目录进行编译
cd /home/redis-3.2.8
make
5、进入到src下进行安装:make install
6、创建两个文件夹存放redis的命令和配置文件
mkdir -p /home/redis/bin
mkdir -p /home/redis/etc
7、把redis-3.2.8下的redis.conf移动到/home/redis/etc
8、把redis-3.2.8/src中的mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-cli、redis-server移动到/home/redis/bin目录下,命令:
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /home/redis/bin
9、启动时需要指定配置文件:
./bin/redis-server etc/redis.conf
10、出现下图所示表示redis启动成功
11、若要将redis改成后台启动,需要修改redis.conf配置文件,将daemonize的值改为yes
通过jedis连接redis单机
1、依赖的jar包:
commons-pool2-2.4.2.jar
jedis-2.9.0.jar
2、通过创建jedis对象,连接redis服务,代理如下:
public static void testJedisSingle() { Jedis jedis = new Jedis("192.168.2.120", 6379);//创建jedis对象 jedis.set("name", "zhangsan");//设置数据 String name = jedis.get("name");//获取数据 System.out.println(name); jedis.close();//关闭连接 }
注:外部链接连接redis失败的解决办法。一般情况下出现这种情况是因为防火墙,将防火墙关闭或者将6379端口加到防火墙中。
3、使用连接池连接redis,代码如下:
public static void redisPool() { JedisPoolConfig config = new JedisPoolConfig(); //最大连接数 config.setMaxTotal(30); //最大连接空闲数 config.setMaxIdle(2); JedisPool pool = new JedisPool(config, "192.168.2.120", 6379); Jedis jedis = null; try { jedis = pool.getResource(); jedis.set("name", "lisi"); String name = jedis.get("name"); System.out.println(name); }catch(Exception ex){ ex.printStackTrace(); }finally{ if(jedis != null){ //关闭连接 jedis.close(); } } }