redis

2008意大利的一家创业公司开发,网站统计系统。

redis读的速度每秒11万次,写的速度8万1千次。

新浪微博,知乎,github

支持的数据类型:字符串类型,列表类型,有序集合,散列类型,集合类型。

 

应用场景:数据缓存,任务队列,应用排行榜,网站访问统计,数据过期处理。

分布式集群架构中的session分离

http://www.runoob.com/redis/redis-install.html(参考安装)

linux在线安装redis的依赖环境命令:yum install gcc-c++

在官网上下载tar压缩包

使用filezilla工具上传到root根目录下,

tar -zxvf redis-4.0.1.tar.gz   解压

cd redis-4.0.1 

make 编译

make PREFIX=/usr/local/redis install  #安装到指定目录中

 

cd /usr/local

ll  有redis文件夹了

cd redis

cd bin

 

在安装redis成功后,你将可以在/usr/local/redis看到一个bin的目录,里面包括了以下文件: 

1

redis-benchmark  #性能测试的一个工具

redis-check-aof  #文件修复的一个工具

redis-check-dump  #文件检查的一个工具

redis-cli         #命令行的客户端

redis-server #redis服务器启动的命令

 

cd ~ 

 

cd redis-4.0.1 

cp redis.conf /usr/local/redis #复制文件到制定文件夹

cd /usr/local/redis #ll看到bin文件夹和redis.conf文件

cd bin

./redis-server(前段启动后当前窗口就不能输入命令了,不推荐)

一般建议后端启动方式:

进入到 /usr/local/redis文件夹下

cd ..

vim redis.conf #编辑文件,表示要启动后端配置启动进程   1041行号修改配置如下:

配置文件中把:不然外部链接不设置密码会连不上

protected-mode yes 中的yes改为no

 

1.然后就可以后端启动了:

./bin/redis-server ./redis.conf

 

2.然后通过命令查看redis的进程是否存在

ps -ef | grep -i redis

 

./bin/redis-cli shutdown #关闭redis命令

设置了密码:先进redis-cli   然后shutdown

ps -ef | grep -i redis查看进程就会发现没有了

 

再启动:运行客户端存储数据

(/usr/local/redis此时位置)

运行命令: ./bin/redis-cli

 

输入个:ping

回来pong说明连接正常,exit退出客户端命令

如下图

 

输入键值对查询key和删除如下

 

java使用Jedis客户端连接redis

在连接之前要打开linux中6379端口打开,不然jedis在连接的时候会报错

redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out

 

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

1、关闭并禁止firewall开机启动:

停止

systemctl stop firewalld.service      

禁止开机启动

systemctl disable firewalld.service 

2、安装iptables防火墙

yum install iptables-services 

编辑防火墙配置文件打开指定的端口号使用udp协议打开6379redis端口:

vi /etc/sysconfig/iptables 

 

 

 

 

保存退出

:wq

最后重启防火墙使配置生效

systemctl restart iptables.service 

设置防火墙开机启动

systemctl enable iptables.service 

如果java客户端是报refuse connect就把redis.conf的文件注释,如下图:

然后在linux客户端设置个密码:

config set requirepass 123

 

package com.juyuan;


import org.junit.Test;


import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;




public class JedisDemo {


	@Test
	public void demo01(){
		Jedis jedis = new Jedis("192.168.21.129",6379);//设置linux的ip地址和redis的端口号
		jedis.auth("123");//设置密码
		jedis.set("name", "value");
		String value = jedis.get("name");
		System.out.println(value);
		jedis.close();
	 
		
	}
	@Test
	public void demo2(){
		//获得连接池的配置对象
	    JedisPoolConfig config = new JedisPoolConfig();
	    //设置最大连接数
	    config.setMaxTotal(30);
	    //设置最大空闲数,控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
	    config.setMaxIdle(10);
	    //设置等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
	    int timesout=1000;
	    //获得连接池
	     JedisPool jedisPool = new JedisPool(config,"192.168.21.129",6379, timesout,"123");
	     
	     Jedis jedis=null;
	     try{
	    	 //通过连接池获得对象
	    	jedis=jedisPool.getResource();
//	    	jedis.auth("123");
	    	jedis.set("name", "张三");
	    	String value=jedis.get("name");
	    	System.out.println(value);
	     }catch(Exception e ){
	    	 e.printStackTrace();
	     }finally{
	    	if(jedis!=null){
	    		jedis.close();
	    	} 
	    	if(jedisPool!=null){
	    		jedisPool.close();
	    	} 
	     }
	}


}




	@Test
	public void demo01(){
		Jedis jedis = new Jedis("192.168.21.129",6379);//设置linux的ip地址和redis的端口号
		jedis.auth("123");//设置密码
		jedis.set("name", "value");
		String value = jedis.get("name");
		System.out.println(value);
		jedis.close();
	 
		
	}
	@Test
	public void demo2(){
		//获得连接池的配置对象
	    JedisPoolConfig config = new JedisPoolConfig();
	    //设置最大连接数
	    config.setMaxTotal(30);
	    //设置最大空闲数,控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
	    config.setMaxIdle(10);
	    //设置等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
	    int timesout=1000;
	    //获得连接池
	     JedisPool jedisPool = new JedisPool(config,"192.168.21.129",6379, timesout,"123");
	     
	     Jedis jedis=null;
	     try{
	    	 //通过连接池获得对象
	    	jedis=jedisPool.getResource();
//	    	jedis.auth("123");
	    	jedis.set("name", "张三");
	    	String value=jedis.get("name");
	    	System.out.println(value);
	     }catch(Exception e ){
	    	 e.printStackTrace();
	     }finally{
	    	if(jedis!=null){
	    		jedis.close();
	    	} 
	    	if(jedisPool!=null){
	    		jedisPool.close();
	    	} 
	     }
	}


}




 

连接成功!

 

 

 

redis支持的五种数据类型:字符串(String)、hash(哈希)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)

string类型 value的最大长度512M

./redis-cli启动客服端:

设置字符串的值:set company juyuan  (company代表key的值,juyuan代表value)

重新设置 key的值:getkey company baidu

get company(get key如果值是nil说明就是空的null)

del key (删除key的value值)

ttl   str   得到str保存的时间友多少

expire 100 设置过期时间,-1永久,-2key 不存在

 

incr num 0

get num 得到的value值递增一

decr num 递减一

increby num 5一次加五从零开始加

appden 5追加5

 

hash设置:

hset myhash username jack(赋值单个hash的key value)

hget myhash username(取key的username的值为jack)

 

hmset myhash2 username rose age 12(一次设置多个key-value,key为username和age)

 

hmget myhash2 username age(获取多个key的value值)

 

hgetall myhash29(获取所有的key-value对应的值)

 

hdel myhash2 username age(删除多个key)

 

del myhash2(删除所有的key)

 

list

lpush mylist abc 左端添加

rpush mylist 123 右端添加

lrange mylist  0  2(查看列表,0代表从第一个元素开始,2代表从倒数第二个元素结束)

lpop mylist 左边弹出第一个元素

llen mylist 查询list的size

 

一个redis实例里面有16个数据库(0~15)

默认是0号数据库

select 1就切换到1号数据库里了

discard回滚

exec提交

multi事物开启

 

redis的持久化:

redis持久化的两种方式:rdb方式(制定时间内写入磁盘)如果断电的话会丢数据

aof的方式指的是把写操作指令,持续的写到一个类似日志文件里,相对rdb的方式数据的完整性要高点!

 

两种区别就是,一个是持续的用日志记录写操作,crash后利用日志恢复一个是平时写操作的时候不触发写,只有手动提交save命令,或者是关闭命令时,才触发备份操作

AOF的策略:

启用aof,把appendonly 后面的no改为yes。

appendfsync always 每修改一次都保存到硬盘当中(一般选择第一种方式,安全及时保存数据)注释掉第二种

appendsync everysec 每秒都保存数据

appendfsync no  不同步

修改完成重启生效

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值