简介
字符串是Redis中最简单的数据结构,可以存储文字,也可以存储数字,还可以存储二进制数据。针对类型不同,我们可以把它划分为3大类,基于普通字符串的操作、数字以及二进制的操作。如下表常见命令
基本操作 | 数字操作 | 二进制操作 |
SET和GET | INCRBY(增加)和DECRBY(减少) | SETBIT(设置二进制的值)和GETBIT(获取二进制的值) |
SETNX(仅在键key不存在) | INCR(增一)和DECR(减一) | BITCOUNT(计算值为1的二进制位的数量) |
GETSET(设置新值并返回旧值) | INCRBYFLOAT | BITOP(二进制位运算) |
APPEND(追加) | ||
STRLEN(长度) | ||
GETRANGE(范围取值)和SETRANGE(范围设置) | ||
MGET、MSET、MSETNX(同时设置或获取多个字符串键的值) |
实战:
计数器的实现
作用:记录页面被访问的次数
调用的函数:incr、get
#!/usr/bin/env python
#-*- coding:utf8 -*-
import redis
class Counter:
def __init__(self, key, client):
self.key = key
self.client = client
def incr(self, n=1):
counter = self.client.incr(self.key, n)
return int(counter)
def decr(self, n=1):
counter = self.client.decr(self.key, n)
return int(counter)
def reset(self, n=0):
counter = self.client.getset(self.key, n)
if counter is None:
counter = 0
return int(counter)
def get(self):
counter = self.client.get(self.key)
if counter is None:
print "None"
else:
print counter
if __name__=='__main__':
r=redis.Redis(host='127.0.0.1',port=6379)
c=Counter('page-counter',r)
c.incr()
c.incr()
#c.reset()
c.get()
效果图:
在线人数统计
原理:用户ID和位索引之间进行关联
通常网站的每一个会员都有一个自己的数字id,如果id为N的用户在线,我们将索引为N的二进制位的值设置为1.
#!/usr/bin/env python
#-*- coding:utf8 -*-
import redis
class OnlineCount:
def __init__(self, when, client):
self.when = when
self.client = client
def include(self, user_id):
return self.client.setbit(self.when, user_id, 1)
def result(self):
return self.client.bitcount(self.when)
if __name__=='__main__':
r=redis.Redis(host='127.0.0.1',port=6379)
count=OnlineCount('2019-06-27',r)
count.include(4)
count.include(6)
count.include(10)
print count.result()
方案评价: