python-Web-数据库-Redis

概述:

>>>安装:

>>>数据类型:

  string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

>>>数据备份:redis 127.0.0.1:6379> SAVE

>>>设置密码:127.0.0.1:6379> CONFIG set requirepass "123456"

>>>性能测试:redis-benchmark -n 100000

>>>最大链接数:redis-server --maxclients 100000

>>>Redis是基于客户端-服务端模型  请求/响应的TCP服务

  所以客户端通常是阻塞模式,等待服务端响应

  Redis管道技术可以让客户端继续向服务端发送请求,最终一次性返回所有响应

>>>Redis分区,利用多台计算机内存,构建大型数据库

  范围分区:ID010000的用户会保存到实例R0ID1000120000的用户会保存到R1,以此类推

  哈希分区:crc32 hash函数-->key转换为一个数字-->93024922 % 4 = 2,R2

面试题:

1 远程-非关系型数据库-内存-缓存

2 它可以用作数据库、缓存和消息中间件

3 速度快,丰富数据类型

4 redis常见性能问题和解决方案

  Redis 是单进程单线程 利用队列技术将并发访问变为串行访问

 

命令:

String:

key - value(string/int/float)

-----set string1 ‘haha’

-----get string1

list:

key - [12,13,14,15]    左->右

-----lpush list1 12

-----lpop list1

-----llen  list1

set:

key - [1,2,3,4]   无序

-----sadd set1 12

-----scard set1  查看

-----sismember set1 12  是否存在

------srem  set1  

hash:

key - key1 value(string/int/float)

    key2 value(string/int/float)

   key3 vlaue(string/int/float)

 

-----hset hash1 key1 12

 

-----hget hash1 key1

 

-----hlen hash1 

sort set:

key - score(10.1)  value(string/int/float)  rank:1

    score(9.9)  value(string/int/float)  rank:0

         score(10.2)  value(string/int/float)  rank:2

----zadd  zset1  12.2  val1

----zcart  zset1  

-----zrange  zset1  0  2  withscores    排序

python-django应用:

'''缓冲redis'''
import redis
import pickle


class PersonMetaclass(type):
    '''单例模式'''
    __instance = None
    def __call__(self, *args, **kwargs):
        if not self.__instance:
            self.__instance = super().__call__(*args, **kwargs)
        return self.__instance


class Redis(object,metaclass=PersonMetaclass):
    '''共享缓存'''
    def __init__(self,host='127.0.0.1', port=6379, password='123456'):
        '''初始'''
        # 链接redis
        self._redis=redis.Redis(host=host, port=port, password=password)
        self.redis = self._redis

    def setString(self,*args):
        '''' aaa',1 '''
        key,value = args
        self._redis.set(key,pickle.dumps(value))

    def setList(self,*args):
        '''' names_list', *['fi', 'li'] '''
        key, *v = args
        self._redis.lpush(key,pickle.dumps(*v))
        map(lambda value: self._redis.lpush(key,pickle.dumps(value)),list(v))

    def setSet(self):
        ''' key, *['fi', 1] '''
        pass

    def setHash(self,name,**kwargs):
        ''' hash1,{k1:1,k2:2,} '''
        keys,values = kwargs.items()
        map(lambda key,value:self._redis.hset(name, key, pickle.dumps(value)),list(keys),list(values))

    def setSortSet(self,name,nx=False, xx=False, ch=False, incr=False,**kwargs):
        ''' 
        key,[score:value:rank,]
        设置任意数量的元素名称,将对的值设置为键
        ' ' name ' ' '双指定为元素名称键的dict以获得值。
        ' ' nx ' ' '强制ZADD只创建新元素,不更新
        已经存在的元素的得分。
        ' ' xx ' ' '强制ZADD只更新已经更新的元素的分数
        存在。不会添加新元素。
        ' ' ch ' '将返回值修改为已更改的元素数量。
        更改的元素包括添加的新元素和元素
        分数的改变。
        '''
        sorts, values = kwargs.items()
        map(lambda sort, value: self._redis.zadd(name, pickle.dumps(sort), nx=nx, xx=xx, ch=False, incr=incr), list(sorts), list(values))


    def length(self,*args):
        ''' 长度 list '''
        try:
            name,*name1 = args
            if args.__len__() == 1:
                return len(self.get(name))
            return [ self._redis.llen(lens) for lens in args ]
        except:
            return None

    def int_or_str(value):
        ''''''


    def set(self,*args,TYPE=None, **kwargs):
        '''
        存入,String,list
        String:key->value(int,str,float)
        list:  key->list--[]
        '''
        try:
            a,*b = args
            if TYPE is not None:
                if TYPE == 'hash':
                    self.setHash(a,**kwargs)
                elif TYPE == 'sort':
                    self.setSortSet(a,**kwargs)
            elif len(b) == 1:
                self.setString(*args)
            elif len(b) > 1 :
                self.setList(*args)
            assert 'key error'
        except ValueError:
            return ValueError


    def get(self,name):
        ''' 取出 '''
        try:
            return pickle.loads(self._redis.get(name))
        except:
            return None

    def getList(self,name):
        try:
            return pickle.loads(self._redis.rpop(name))
        except:
            return None

    def getHash(self,*args):
        try:
            name,key,*value = args
            return pickle.loads(self._redis.hmget(name,key,*value))
        except:
            return None

 

转载于:https://www.cnblogs.com/person1-0-1/p/11288486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值