Redis服务搭建和使用

news/2024/7/2 1:24:51

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


http://www.niftyadmin.cn/n/4820384.html

相关文章

百度贴吧...别人的日记.

设百度为首页 与百度对话 超级搜霸 进入贴吧 贴吧搜索 按作者检索 新 闻网 页贴 吧MP3图 片回复留言 | 精品区 | 申请吧主| 举报 | <script languagejavascript> document.write(""); </script> 登录 | <script languageJavaScript> url f_esc…

用 Emacs Muse 来制作测试结果报告

用 Emacs Muse 来制作测试结果报告文档选项未显示需要 JavaScript 的文档选项<script language"JavaScript" type"text/javascript"> </script>打印本页<script language"JavaScript" type"text/javascript"> </…

day正则表达式补充

# 2.正则 # 方法&#xff1a;findall | match | split | sub# a 10# print(a.__hash__())# def fn():# pass# print(fn.__name__)# import json# print(json.dumps([1,2,3]))import re # 全文匹配&#xff0c;返回值是列表res re.findall(\d*?, d1) # [, , ] | [, , 1, ]pri…

网络、HTTP相关学习总结

引言&#xff1a;上图是《图解 HTTP》这本书的目录&#xff0c;最近又重新读了一下这本书&#xff0c;然后打算写篇总结&#xff0c;来加深自己的理解&#xff0c;然而在做总结的时候觉得还是全面总结下网络相关的知识吧&#xff0c;所以又在网上找了大量的资料&#xff0c;最终…

sawfish-lisp-source_1.3.1-1_all.deb

sawfish-lisp-source_1.3.1-1_all.deb 的下载页面 如果您正在运行 Ubuntu&#xff0c;请尽量使用像 aptitude 或者 synaptic 一样的软件包管理器&#xff0c;代替人工手动操作的方式从这个网页下载并安装软件包。 您可以使用以下列表中的任何一个源镜像只要往您的 /etc/apt/sou…

TCL解释器与C++代码交互过程?

工 具 心 情 休 闲 博 客 论 坛 游客: 注册 | 登录 | 搜索 | 繁體中文 百思论坛 网络仿真软件 NS TCL解释器与C代码交互过程&#xff1f;上一主题下一主题 可打印版本 | 订阅主题 | 收藏主题 | 开通个人空间 <script type"text/javascript"> fun…

leetcode_654. Maximum Binary Tree

https://leetcode.com/problems/maximum-binary-tree/ 给定数组A&#xff0c;假设A[i]为数组最大值&#xff0c;创建根节点将其值赋为A[i]&#xff0c;然后递归地用A[0,i-1]创建左子树&#xff0c;用A[i1&#xff0c;n]创建右子树。 使用vector的assign函数,该函数的特性&#…

【vueJs源码】阅读之vm.$watch函数

我们经常使用watch肯定知道它&#xff0c;他和computer一样都是数据发生变化都会触发它。今天我们就来了解一下它的原理。 他的用法 Vue.prototype.$watch function (expOrFn: string | (() > any),cb: any,options?: Record<string, any> ): Function这是vuejs源…