解上篇
- 今天在使用jedis.jar进行redis连接的时候JedisPoolConfig 居然没有set方法,换了几个jar包也不管用,把源码下载下来,发现继承的是
org.apache.commons.pool2.impl.GenericObjectPoolConfig,下载commons-pool2.4.2.jar后,出现了set方法
Jedis是https://github.com/xetorthio/jedis它
JedisPoolConfig config = new JedisPoolConfig();
//连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
config.setBlockWhenExhausted(true);
//设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
//是否启用pool的jmx管理功能, 默认true
config.setJmxEnabled(true);
//MBean ObjectName = new ObjectName("org.apache.commons.pool2:type=GenericObjectPool,name=" + "pool" + i); 默 认为"pool", JMX不熟,具体不知道是干啥的...默认就好.
config.setJmxNamePrefix("pool");
//是否启用后进先出, 默认true
config.setLifo(true);
//最大空闲连接数, 默认8个
config.setMaxIdle(8);
//最大连接数, 默认8个
config.setMaxTotal(8);
//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
config.setMaxWaitMillis(-1);
//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
config.setMinEvictableIdleTimeMillis(1800000);
//最小空闲连接数, 默认0
config.setMinIdle(0);
//每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
config.setNumTestsPerEvictionRun(3);
//对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
config.setSoftMinEvictableIdleTimeMillis(1800000);
//在获取连接的时候检查有效性, 默认false
config.setTestOnBorrow(false);
//在空闲时检查有效性, 默认false
config.setTestWhileIdle(false);
//逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
config.setTimeBetweenEvictionRunsMillis(-1);
JedisPool pool = new JedisPool(config, "localhost",);
int timeout=3000;
new JedisSentinelPool(master, sentinels, poolConfig,timeout);//timeout 读取超时
-
- 2018-7-13
1)redis的时候lpush 写入的顺序,怎么和读出的顺序不一致
2)redis的数据结构分为字符串(string) 哈希(hash) 列表(list) 集合(set) 有序集合(zset)
2.1)string 操作 set name wang1 (赋值) 获取数据 get name
2.2)哈希操作 hmset hashname fieldname1 value1 fieldname2 value2 fieldname3 value3(赋值)
Hget hashname fieldnam21 hget hashname fieldname2 (获取数据)
2.3)列表 lpush listname value1 lpush listname value
Lrange listname start stop
2.4)集合 sadd setname value1 value2 value3
Smembers setname
2.5)有序集合 zadd sortname score member score member
Zrangebyscore sortname min max
zadd school 0 a1 1 a2 2 a3
zrangebyscore school 0 10
- redis-cli -h host -p port -a password
- 2018-7-14
Redis集群配置,也是参考网上的
- 解压后安装redis4.0.10
- /home/openwrt/myredis 把相应的redis4.0.10/src下的bin文件copy到这里
make prefix=/home/openwrt/myredis/ install
- 在myredis下建立7000 7001 7002 7003 7004 7005 几个目录
- 把redis.conf copy到myredis下
- 修改redis.conf文件
Port 7000 (每个文件一个端口)
daemonize yes (类似后台运行)
cluster-enabled yes (集群使能)
cluster-config-file nodes7005.conf (每个指定自己的node文件名)
cluster-node-timeout 15000 集群节点超时
appendonly yes
dir /home/openwrt/myredis/7005 (指定每一个redis节点存放的位置)
pidfile /var/run/redis_7005.pid (每一个redis节点指定自己的pid文件)
6)把修改后的redis.conf copy到7000 7001等各个文件夹,然后修改每个文件的port cluster-config-file dir pdifile
7)启动各个redis ./bin/redis-server ./7000/redis.conf ./bin/redis-server ./7001/redis.conf 等
8)ps aux | grep redis 可以看到各个启动的文件
刚开始没有指定不同的cluster-config-file dir pidfile,造成了只启动了第一个,改完后就都启动了
- ./redis-cli -p 7000 查看是否能连接 get foo 报错
(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽)
原因是没有进行集群
- redis的集群需要ruby
- Ruby安装
10.1)我的redis对应的Ruby是2.2版本
10.2)卸载现在的sudo apt-get remove ruby1.9
10.3)安装依赖库
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake
10.4)安装ruby
mkdir /tmp/ruby && cd /tmp/ruby
curl -L --progress https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz | tar xz
cd ruby-2.2.3
./configure --disable-install-rdoc
make
sudo make install
10.5)配置gem
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
10.6)安装 bundle
sudo gem install bundler --no-ri --no-rdoc
bundle config mirror.https://rubygems.org https://ruby.taobao.org
10.7)查看是否安装ok
ruby -v
gem -v
bundle -v
Sudo gem install redis
- redis集群
11.1)把redis-trib.rbcopy到myredis/bin下
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
- 说下我的问题,不知道为什么我启动机器后,走有个6379的redis服务,还得每次都关了它
- 由于我的redis默认配置了requirepass 密码,造成了redistrib.rb不能集群成功,只能把密码取消了才行
- 这个也是根据网上的资料做的,但是为什么,会有这个,难道我在别的redis上不能访问集群的key吗?
127.0.0.1:7003> get foo
(error) MOVED 12182 127.0.0.1:7002
集群需要 redis-cli -c -p 7000 这样进入,才不会报错