Redis服务搭建和使用

Redis是什么?
Redis – 缓存数据的工具之一

Redis服务的搭建:
Redis在window平台安装:
1.到https://github.com/dmajkic/redis/downloads下载对应的redis安装包
2.解压后,包含文件:
redis-server.exe:服务程序
redis.conf:配置文件,可以修改,一般默认就ok了
redis-check-dump.exe:本地数据库检查
redis-check-aof.exe:更新日志检查
redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询 (类似于 Apache 的ab 工具).
3.配置环境变量

Redis在Linux平台上安装:
1. 到官方网站:http://www.redis.io/download下载对应安装包
2. 解压
3. 进入解压文件下,编译,命令执行如下

$ wget http://download.redis.io/releases/redis-2.8.13.tar.gz
$ tar xzf redis-2.8.13.tar.gz
$ cd redis-2.8.13
$ make

Redis服务启动:

redis-server redis.conf

Redis连接

1:   ./redis-cli -h (ip) -p(port)
2:   telnet 127.0.0.1 6379       (ip接端口)

python 使用Redis模块
python redis具体使用可以参考:http://www.cnblogs.com/wangtp/p/5636872.html

一个简单的例子

import sys
import redis
import concurrent.futures
import ConfigParser

config = ConfigParser.ConfigParser()
config.readfp(open('config/config.ini'), 'rb')
HOST = '%s' % config.get('redis', 'ip')
PORT = config.get('redis', 'port')
r = redis.Redis(host=HOST, port=PORT)
fred = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def check_server():
    try:
        print r.info()
    except redis.exceptions.ConnectionError:
        print >> sys.stderr, "Error: cannot connect to redis server. Is the server running?"
        sys.exit(1)


def f(x):
    res = x * x
    r.rpush("test", res)
    # r.delete("test")

def main():
    # with 保证所有线程都执行完,再执行下面操作
    with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor:
        for num in fred:
            executor.submit(f, num)
    #
    print r.lrange("test", 0, -1)


####################

if __name__ == "__main__":
    check_server()
    ###
    r.delete("test")
    main()

Jedis客户端使用
获取
Jedis的github地址为: https://github.com/xetorthio/jedis
可以通过下面两种方式来获取Jedis的Jar包

直接下载Jar包
https://github.com/xetorthio/jedis/releases

从Maven仓库中取Jar包

<dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.5.2</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

使用
最简单的使用方式

Jedis jedis = new Jedis("localhost");
jedis.set("foo", "bar");
String value = jedis.get("foo");

当然,这种方式并不好,因为每次使用都要新建立一个连接,而且Jedis并不是线程安全的,在并发访问的情况下容易出奇怪的问题。所以应该使用下面的这种方式:使用池 来做。

JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
Jedis jedis = pool.getResource();
try {
    /// 开始使用
    jedis.set("foo", "bar");
    String foobar = jedis.get("foo");
    jedis.zadd("sose", 0, "car"); 
    jedis.zadd("sose", 0, "bike"); 
    Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
    /// 使用完后,将连接放回连接池
    if (null != jedis) {
        jedis.close();
    }
}
/// 应用退出时,关闭连接池:
pool.destroy();
这种使用池的方式一般都能满足我们的要求,但是有时候我们使用多台Redis服务器时,我们需要将不同的key放到不同的Redis服务器上面,这时我们可以根据业务的不同来选择不同的Redis服务器。这么做可以一定程度的解决问题,但是还会有另外的问题生产,如:我们不容易确定哪个业务产品的数据有多大。这样会使数据不能平均的分配到多台Redis服务器上面。 
这时我们需要使用分片的技术。代码如下:

// 分片信息  
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo si = new JedisShardInfo("localhost", 6379);
si.setPassword("foobared");
shards.add(si);
si = new JedisShardInfo("localhost", 6380);
si.setPassword("foobared");
shards.add(si);

// 池对象  
ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards);

// 开始使用  
ShardedJedis jedis = pool.getResource();
jedis.set("a", "foo");
.... // do your work here
pool.returnResource(jedis);

.... // a few moments later
ShardedJedis jedis2 = pool.getResource();
jedis.set("z", "bar");
pool.returnResource(jedis);
pool.destroy();

集群

Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");

来自:http://my.oschina.net/gccr/blog/307725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值