redis 连接池

redis是一个key-value存储系统,和memcached类似,支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set-有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集和差集及更丰富的操作,而且这些操作都说原子性的。在此基础上,redis支持各种不同的方式排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

python 操作redis,未使用连接池:

redis-py提供两个Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py.

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host=‘127.0.0.1‘, port=6379, password=‘123456‘, db=db)
#给redis添加值,传值方式是key-value,key不可重复,value的形式尽量是string,也可以传list、字典,redis内存放的是字节res = conn_redis.set(‘name‘, ‘testredis‘)
#print(res)    #返回值是布尔类型,set成功,则返回true
conn_redis.set(‘days‘, ‘[10,4,5,12,44]‘)

#set key值到redis内,且可以设置过期时间,10s
result = conn_redis.setex(‘session‘, ‘[email protected]‘, 10)   #单位是s
print(result)   #返回值是布尔类型,set成功,则返回true
#批量插入redis,可以写入多个key-valye
conn_redis.mset(a=‘xiaohei‘, b=‘xiaobai‘, c=‘xiaohuang‘)
#设置key时,可以设置文件夹,user文件夹,key:test,value:haha
conn_redis.set(‘user:test‘,‘haha‘)

python 操作redis,使用连接池:

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

def getcoon():
      pool = redis.ConnectionPool(host=‘192.168.1.112‘, port=6379, password=‘123456‘, db=0)
      coon = redis.Redis(connection_pool=pool)
      coon.set(‘key‘, ‘value‘)
      res = coon.get(‘key‘)
      return res

redis 使用连接池操作

class OPRedis(object):

    def __init__(self):
        if not hasattr(OPRedis, ‘pool‘):
            OPRedis.getRedisCoon()  #创建redis连接
        self.coon = redis.Redis(connection_pool=OPRedis.pool)

    @staticmethod
    def getRedisCoon():
        OPRedis.pool = redis.ConnectionPool(host=redisInfo[‘host‘], password=redisInfo[‘password‘], port=redisInfo[‘port‘], db=redisInfo[‘db‘])

    """
    string类型 {‘key‘:‘value‘} redis操作
    """

    def setredis(self, key, value, time=None):
        #非空即真非0即真
        if time:
            res = self.coon.setex(key, value, time)
        else:
            res = self.coon.set(key, value)
        return res

    def getRedis(self, key):
        res = self.coon.get(key).decode()
        return res

    def delRedis(self, key):
        res = self.coon.delete(key)
        return res

    """
    hash类型,{‘name‘:{‘key‘:‘value‘}} redis操作
    """
    def setHashRedis(self, name, key, value):
        res = self.coon.hset(name, key, value)
        return res

    def getHashRedis(self, name, key=None):
        # 判断key是否我为空,不为空,获取指定name内的某个key的value; 为空则获取name对应的所有value
        if key:
            res = self.coon.hget(name, key)
        else:
            res = self.coon.hgetall(name)
        return res

    def delHashRedis(self, name, key=None):
        if key:
            res = self.coon.hdel(name, key)
        else:
            res = self.coon.delete(name)
        return res

redisInfo配置

redisInfo = {
    "host": ‘192.168.1.112‘,
    "password": ‘123456‘,
    "port": 6379,
    "db": 0
}

创建test,测试redis连接

if __name__ == ‘__main__‘:
    opr = OPRedis()
    res = opr.setredis(‘two‘, ‘哈哈‘)
    res = opr.getRedis(‘two‘)
    print(res)

参考链接:https://www.cnblogs.com/xiaoming279/p/6293583.html

时间: 2024-10-05 23:56:49

redis 连接池的相关文章

redis 连接池 - 转载

所需jar:jedis-2.1.0.jar和commons-pool-1.5.4.jar Jedis操作步骤如下:1->获取Jedis实例需要从JedisPool中获取:2->用完Jedis实例需要返还给JedisPool:3->如果Jedis在使用过程中出错,则也需要还给JedisPool: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; imp

java中使用jedis操作redis(连接池方式)

1 package com.test; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.Map; 7 8 import org.junit.Before; 9 import org.junit.Test; 10 11 import redis.clients.jedis.Jedis; 12 13 public class TestRedis

Java的Redis连接池代码性能不错

其实这个是引用自网友http://blog.csdn.net/tuposky/article/details/45340183,有2个版本,差别就是ReentrantLock和synchronized.另外原作者使用了断言,我觉得这个还是不用为好. ReentrantLock版 import java.util.concurrent.locks.ReentrantLock; import org.apache.commons.lang.StringUtils; import org.apache

day24——NoSQL简介、redis服务搭建、redis连接池、redis管道

一.Redis 安装 yum install -y epel-releaseyum install -y gcc jemalloc-devel wgetcd /usr/local/srcwget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 -O redis-2.8.21.tar.gztar xf redis-2.8.21.tar.gzcd redis-2.8.21makemake PREFIX=/usr/local/redis

python 基础 10.0 nosql 简介--redis 连接池及管道

一. NOSQL 数据库简介 NoSQL 泛指非关系型的数据库.非关系型数据库与关系型数据库的差别 非关系型数据库的优势: 1.性能NOSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL 层的解析,所以性能非常高. 2.可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展. 关系型数据库的优势: 1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询. 2.事务支持使得对于安全性能很高的数据访问要求得以实现.对于这两类数据

三:Redis连接池、JedisPool详解、Redisi分布式

单机模式: 1 package com.ljq.utils; 2 3 import redis.clients.jedis.Jedis; 4 import redis.clients.jedis.JedisPool; 5 import redis.clients.jedis.JedisPoolConfig; 6 7 /** 8 * Redis操作接口 9 * 10 * @author NiceCui 11 * @version 1.0 2017-6-14 上午08:54:14 12 */ 13

Java Redis 连接池 Jedis 工具类

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.IOException; import java.io.InputStream; import java.util.Prop

redis连接池 jedis-2.9.0.jar+commons-pool2-2.4.2.jar

java使用Redis连接池  jar包为 jedis-2.9.0.jar+commons-pool2-2.4.2.jar 1 package com.test; 2 3 import redis.clients.jedis.Jedis; 4 import redis.clients.jedis.JedisPool; 5 import redis.clients.jedis.JedisPoolConfig; 6 7 public class RedisUtil { 8 //Redis服务器IP

Redis连接池

package com.lee.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public final class RedisPool { //Redis服务器IP private static String ADDR = "127.0.0.1"; //Redis的端口号 private

Go语言之从0到1实现一个简单的Redis连接池

Go语言之从0到1实现一个简单的Redis连接池 前言 最近学习了一些Go语言开发相关内容,但是苦于手头没有可以练手的项目,学的时候理解不清楚,学过容易忘. 结合之前组内分享时学到的Redis相关知识,以及Redis Protocol文档,就想着自己造个轮子练练手. 这次我把目标放在了Redis client implemented with Go,使用原生Go语言和TCP实现一个简单的Redis连接池和协议解析,以此来让自己入门Go语言,并加深理解和记忆.(这样做直接导致的后果是,最近写JS时