Python自学第十一周(2)

有些话、适合烂在心里 提交于 2019-11-27 02:49:18
 
自己看看memcached
 
Redis
1、普通操作
安装
 
配置
 
linux端
 
 
使用pycharm与linux端的redis远程连接时候
 
必须关闭防火墙
暂时关闭防火墙:(立即生效,开机重启,会重新打开)
service iptables stop
 
在配置文件redis.conf中修改:
注释 bind
修改 protected-mode no
修改 daemonize yes
 
还有启动服务端时候:使用
redis-server redis.conf
 
tips:都用得上
查看进程                    ps -ef|grep redis
指定进程号删除          kill 2337
关闭服务端                 redis-cli shutdown
 
 
pycharm上面的代码
1 #Author: Zachary
2 import redis
3 r = redis.Redis(host='192.168.86.10', port=6379)
4 r.set('foo', 'Bar')
5 print(r.get('foo'))
 
 
 
2、连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
1 #Author: Zachary
2 import redis
3 pool = redis.ConnectionPool(host='192.168.86.10', port=6379)
4 r = redis.Redis(connection_pool=pool)
5 r.set('foo', 'Bar')
6 print(r.get('foo'))
运行结果一样的
 
3、操作
String操作,redis中的String在在内存中按照一个name对应一个value来存储。如图:
 
 
set(name, value, ex=None, px=None, nx=False, xx=False)
 
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行
     xx,如果设置为True,则只有name存在时,岗前set操作才执行
 
 
setnx(name, value)
设置值,只有name不存在时,执行设置操作(添加)
 
setex(name,time,value)
time,过期时间(数字秒 或 timedelta对象)
 
psetex(name, time_ms, value)
time_ms,过期时间(数字毫秒 或 timedelta对象)
 
mset(*args, **kwargs)
批量设置值
如:
    mset(k1='v1', k2='v2')
    或
    mget({'k1': 'v1', 'k2': 'v2'})
 
get(name)
获取值
 
mget(keys, *args)
批量获取
如:
    mget('ylr', 'wupeiqi')
    或
    r.mget(['ylr', 'wupeiqi'])
 
getset(name, value)
设置新值并获取原来的值
 
getrange(key, start, end)
获取子序列(根据字节获取,非字符)
参数:
    name,Redis 的 name
    start,起始位置(字节)
    end,结束位置(字节)
如: "武沛齐" ,0-3表示 "武"
 
setrange(name, offset, value)
修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
参数:
    offset,字符串的索引,字节(一个汉字三个字节)
    value,要设置的值
 
setbit(name, offset, value)
对name对应值的二进制表示的位进行操作
参数:
    name,redis的name
    offset,位的索引(将值变换成二进制后再进行索引)
    value,值只能是 1 或 0
注:如果在Redis中有一个对应: n1 = "foo",
        那么字符串foo的二进制表示为:01100110 01101111 01101111
    所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
        那么最终二进制则变成 01100111 01101111 01101111,即:"goo"
扩展,转换二进制表示:
    #source = "武沛齐"
    source = "foo"
    for i in source:
        num = ord(i)
        print bin(num).replace('b','')
    特别的,如果source是汉字 "武沛齐"怎么办?
    答:对于utf-8,每一个汉字占 3 个字节,那么 "武沛齐" 则有 9个字节
       对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制
        11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000
        -------------------------- ----------------------------- -----------------------------
                    武                         沛                           齐
 
 
 
getbit(name, offset)
获取name对应的值的二进制表示中的某位的值 (0或1)
 
bitcount(key, start=None, end=None)
获取name对应的值的二进制表示中 1 的个数
参数:
    key,Redis的name
    start,位起始位置
    end,位结束位置
 
strlen(name)
返回name对应值的字节长度(一个汉字3个字节)
 
incr(self, name, amount=1)
自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
参数:
    name,Redis的name
    amount,自增数(必须是整数)
注:同incrby
 
incrbyfloat(self, name, amount=1.0)
自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
参数:
    name,Redis的name
    amount,自增数(浮点型)
 
decr(self, name, amount=1)
自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
参数:
    name,Redis的name
    amount,自减数(整数)
 
append(key, value)
在redis name对应的值后面追加内容
参数:
    key, redis的name
    value, 要追加的字符串
 
 
 
 
 
 
 
 
 
 
 
 
 
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!