Redis简介:
''' redis: 缓存,例如两个个程序A,B之间要进行数据共享,A可以把数据存在redis(内存里),其他程序都可以访问redis里的数据, 这样通过中间商redis就实现了两个程序的内存共享。类似的程序有redis,mongdb,memcache,redis和memcache用的比较多 redis默认存到内存,手动调用后同步到硬盘。 memcache只能存到内存 redis用单线程异步实现的并发 redis就是简单的key-value缓存系统 '''
Python操作Redis包:
首先要安装Redis:pip install redis
import redis # 第一种写法 ''' r = redis.Redis(host='127.0.0.1', port=6379) r.set('foo', 'BAR') print(r.get('foo')) ''' # 第二种写法:连接池。与redis频繁交互的时候就不用不停的建连接 pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) r.set('foo', 'BAR') print(r.get('foo'))
redis操作string: 来自http://www.cnblogs.com/alex3714/articles/6217453.html
redis中的String在在内存中按照一个name对应一个value来存储。如图:

set(name, value, ex=None, px=None, nx=False, xx=False)
| 
 1 
2 
3 
4 
5 
6 
 | 
在Redis中设置值,默认,不存在则创建,存在则修改参数:     ex,过期时间(秒)     px,过期时间(毫秒)     nx,如果设置为True,则只有name不存在时,当前set操作才执行     xx,如果设置为True,则只有name存在时,岗前set操作才执行 | 
setnx(name, value)
| 
 1 
 | 
设置值,只有name不存在时,执行设置操作(添加) | 
setex(name, value, time)
| 
 1 
 | 
设置值,time,过期时间,秒 | 
psetex(name, time_ms, value)
| 
 1 
 | 
设置值, time_ms,过期时间,毫秒 | 
mset(*args, **kwargs)
| 
 1 
2 
3 
4 
5 
 | 
批量设置值如:    mset(k1='v1', k2='v2')    或    mget({'k1': 'v1', 'k2': 'v2'}) | 
get(name)
| 
 1 
 | 
获取值 | 
mget(keys, *args)
| 
 1 
2 
3 
4 
5 
 | 
批量获取如:    mget('ylr', 'wupeiqi')    或    r.mget(['ylr', 'wupeiqi']) | 
getset(name, value)
| 
 1 
 | 
设置新值并获取原来的值 | 
getrange(key, start, end)
| 
 1 
2 
3 
4 
5 
6 
 | 
# 获取子序列(根据字节获取,非字符)# 参数:    # name,Redis 的 name    # start,起始位置(字节)    # end,结束位置(字节)# 如: "武沛齐" ,0-3表示 "武" | 
setrange(name, offset, value)
| 
 1 
2 
3 
4 
 | 
# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)# 参数:    # offset,字符串的索引,字节(一个汉字三个字节)    # value,要设置的值 | 
setbit(name, offset, value)
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
 | 
# 对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)
| 
 1 
 | 
# 获取name对应的值的二进制表示中的某位的值 (0或1) | 
bitcount(key, start=None, end=None)
| 
 1 
2 
3 
4 
5 
 | 
# 获取name对应的值的二进制表示中 1 的个数# 参数:    # key,Redis的name    # start,位起始位置    # end,位结束位置 | 
strlen(name)
| 
 1 
 | 
# 返回name对应值的字节长度(一个汉字3个字节) | 
incr(self, name, amount=1)
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。# 参数:    # name,Redis的name    # amount,自增数(必须是整数)# 注:同incrby | 
incrbyfloat(self, name, amount=1.0)
| 
 1 
2 
3 
4 
5 
 | 
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。# 参数:    # name,Redis的name    # amount,自增数(浮点型) | 
decr(self, name, amount=1)
| 
 1 
2 
3 
4 
5 
 | 
# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。# 参数:    # name,Redis的name    # amount,自减数(整数) | 
append(key, value)
| 
 1 
2 
3 
4 
5 
 | 
# 在redis name对应的值后面追加内容# 参数:    key, redis的name    value, 要追加的字符串 | 
                    
                
                
            
        
浙公网安备 33010602011771号