redis操作

解上篇

  1. 今天在使用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 读取超时

 

    1. 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

  1. redis-cli -h host -p port -a password
    1. 2018-7-14

Redis集群配置,也是参考网上的

  1. 解压后安装redis4.0.10
  2. /home/openwrt/myredis 把相应的redis4.0.10/src下的bin文件copy到这里

make prefix=/home/openwrt/myredis/ install

  1. 在myredis下建立7000 7001 7002 7003 7004 7005 几个目录
  2. 把redis.conf copy到myredis下
  3. 修改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,造成了只启动了第一个,改完后就都启动了

  1. ./redis-cli -p 7000 查看是否能连接  get foo 报错

(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽)

原因是没有进行集群

  1. redis的集群需要ruby
  2. 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

  1. 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

  1. 说下我的问题,不知道为什么我启动机器后,走有个6379的redis服务,还得每次都关了它
  2. 由于我的redis默认配置了requirepass 密码,造成了redistrib.rb不能集群成功,只能把密码取消了才行
  3. 这个也是根据网上的资料做的,但是为什么,会有这个,难道我在别的redis上不能访问集群的key吗?

127.0.0.1:7003> get foo

(error) MOVED 12182 127.0.0.1:7002

集群需要 redis-cli -c -p 7000 这样进入,才不会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值