Redis开发和运维 (3) - 客户端使用

Clients

Redis支持的客户端,查看这里

Java客户端

Jedis

Maven依赖:

1
2
3
4
5
6
7
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

Jedis直连:

Jedis直连

  1. 生成Jedis对象(连接)
  2. Jedis执行命令
  3. 返回执行结果
  4. 关闭Jedis连接
1
2
3
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("hello", "world");
String value = jedis.get("hello");
1
Jedis(String host, int port, int connectionTimeout, int soTimeout)
  • host: Redis节点所在机器的IP
  • port:Redis节点的端口
  • connectionTimeout: 客户端连接超时
  • soTimeout:客户端读写超时

Jedis连接池

Jedis连接池

  1. 从资源池借Jedis对象
  2. Jedis执行命令
  3. 返回执行结果
  4. 归还Jedis对象给连接池

方案对比:

- 优点 缺点
直连   简单方便
适用于少量长期连接的场景
存在每次新键/关闭TCP开销
资源无法控制,存在连接泄露的可能
Jedis对象线程不安全
连接池   Jedis预先生成,降低开销
连接池的形式保护和控制资源使用
相对于直连,使用相对麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题

简单使用

1
2
3
4
// 1. string
jedis.set("hello", "world");
jedis.get("hello");
jedis.incr("counter");
1
2
3
4
// 2. hash
jedis.hset("myhash", "f1", "v1");
jedis.hset("myhash", "f2", "v2");
jedis.hgetAll("myhash");
1
2
3
4
5
// 3. list
jedis.hset("mylist", "1");
jedis.hset("mylist", "2");
jedis.hset("mylist", "3");
jedis.lrange("mylist", 0, -1);
1
2
3
4
5
// 4. set
jedis.sadd("myset", "a");
jedis.sadd("myset", "b");
jedis.sadd("myset", "c");
jedis.smembers("myset");
1
2
3
4
5
// 5. zset
jedis.zadd("myzset", 99, "tom");
jedis.zadd("myzset", 66, "pete");
jedis.zadd("myzset", 33, "jam");
jedis.zrangeWithScores("myset", 0, -1);

Jedis连接池使用

Jedis操作步骤如下:

  1. 获取Jedis实例需要从JedisPool中获取
  2. 用完Jedis实例需要返还给JedisPool
  3. 如果Jedis在使用过程中出错,则也需要还给JedisPool
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package cn.crxy.redis;

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

public class RedisUtils {

private RedisUtils(){
}

private static JedisPool jedisPool = null;
//获取链接
public static synchronized Jedis getJedis(){
if(jedisPool==null){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//指定连接池中最大空闲连接数
jedisPoolConfig.setMaxIdle(10);
//链接池中创建的最大连接数
jedisPoolConfig.setMaxTotal(100);
//设置创建链接的超时时间
jedisPoolConfig.setMaxWaitMillis(2000);
//表示连接池在创建链接的时候会先测试一下链接是否可用,这样可以保证连接池中的链接都可用的。
jedisPoolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(jedisPoolConfig, "192.168.1.170", 6379);
}
return jedisPool.getResource();
}

//返回链接
public static void returnResource(Jedis jedis){
jedisPool.returnResourceObject(jedis);
}

}

python客户端

redis-py

安装redis-py

GitHub

要安装redis-py,只需::

1
pip install redis

或从源代码:

1
python setup.py install
1
2
3
4
5
6
import redis
>>> r = redis.Redis(host='localhost', port=6379, db=0)
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

golang客户端

redigo

GitHub

安装:

1
go get github.com/gomodule/redigo/redis

API文档

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :