一、redis引入
1、简要概括redis
1.1 redis默认端口:6379
1.2 redis实现的效果:资源共享
1.3 redis实现的基本原理:不同的进程和一个公共的进程之间建立socket,用来实现完成不同进程之间的资源共享
1.4 redis是一个单线程异步执行的程序,其效率为每秒处理50-80w个请求
2、redis需要掌握的几大块内容
2.1 string操作
2.2 hash操作
2.3 list操作
2.4 set操作
2.5 sore set操作 (有序集合)
2.6 管道
2.7 发布订阅
3、redis的使用(安装方式及使用方式)
安装方式:此处不描述redis的安装方法了,windows使用msi格式直接安装后运行redis-cli.exe即可,linux中方式类似
使用方式:set与get
作为引入,此处先介绍set与get,set为设置一个string类型的变量,get为获取这个string类型变量的值
127.0.0.1:6379[1]> set k1 123OK127.0.0.1:6379[1]> set k2 456OK127.0.0.1:6379[1]>get k1"123"
127.0.0.1:6379[1]>get k2"456"
4、python中对redis的操作模块---redis
同样此处先描述get与set的使用,需要建立一个连接,标明redis服务器的ip和端口号
importredis
conn=redis.Redis(host='192.168.99.106',port='6379')#正常的set和get
conn.set('k1','v1')print(conn.get('k1'))
5、socket池的使用
通常,我们在进行redis操作的时候,需要多次设置值和取值,如果每次操作都进行socket连接,会有大量时间被浪费在建立连接的过程中。
此时,我们建立一个socket_pool,可以理解为预先将连接建立好,我们要对redis操作时,直接从pool中取出已有的连接即可操作,可以节省时间
importredis
pool=redis.ConnectionPool(host='127.0.0.1',port='6379')
conn=redis.Redis(connection_pool=pool)
二、redis中对string的操作
1、set与get,string类型的变量的设置与取值
linux或windows环境中
127.0.0.1:6379[1]> set k1 123OK127.0.0.1:6379[1]> set k2 456OK127.0.0.1:6379[1]>get k1"123"
127.0.0.1:6379[1]>get k2"456"
在python中
importredis
conn=redis.Redis(host='192.168.99.106',port='6379')#正常的set和get
conn.set('k1','v1')print(conn.get('k1'))
2、ex/px/nx/xx的使用,变量的一些附属参数
ex,设置变量的超时时间,单位为s
ps,设置变量的超时时间,单位为毫秒,ps
nx,设置变量,当变量不存在时,创建并设置变量,如果变量存在,不改变原来变量的值
xx,设置变量,如果变量不存在,不创建,如果变量存在,改变原来的变量值
linux或windows环境中
127.0.0.1:6379[1]> set k1 111nx
(nil)127.0.0.1:6379[1]>get k1"123"
127.0.0.1:6379[1]> set k1 111xx
OK127.0.0.1:6379[1]>get k1"111"
127.0.0.1:6379[1]>
在python中
#ex px nx xx
conn.set('key2','value',ex=4)
conn.set('key3','value',px=4)
conn.set('newname','value',xx=True)
conn.set('keyxx','value',nx=True)
3、setex/psetex/setnx(ex px nx的另一种使用方式)
linux或windows环境中
127.0.0.1:6379[1]> setex k1 3v1
OK
127.0.0.1:6379[1]> psetex k2 3v2
OK
在python中
#setex psetex setnx
conn.setex('keyex','xx',3)
conn.psetex('keypx',10000,'xx')#注意顺序
conn.setnx('keyxxx','xxx')
4、mset/mget 批量操作string变量的方法
linux或windows环境中
127.0.0.1:6379[1]> mset k3 333 k4 444OK127.0.0.1:6379[1]>mget k3 k41) "333"
2) "444"
在python中
#批量获取或修改mset mget#mset两种形式 key=value 或 字典#mget两种形式 key,key 或列表
conn.mset(key1='1',key2=2)
conn.mset({'key3':'3','key4':'4'})print(conn.mget('key1','key2'))#[b'1', b'2']
print(conn.mget(['key3','key4']))#[b'3', b'4']
5、getset 先获取原值再更改值
linux或windows环境中
127.0.0.1:6379[1]> keys *
1) "k4"
2) "k3"
127.0.0.1:6379[1]>get k4"444"
127.0.0.1:6379[1]> getset k4 555
"444"
127.0.0.1:6379[1]>get k4"555"
在python中
print(conn.getset('key1','111'))
6、Getrange、setrange切片与覆盖
linux或windows环境中
127.0.0.1:6379[1]> set kk 123456789OK127.0.0.1:6379[1]>get kk"123456789"
127.0.0.1:6379[1]> getrange kk 0 5
"123456"
127.0.0.1:6379[1]> setrange kk 5 0000(integer)9
127.0.0.1:6379[1]>get kk"123450000"
在python中
x='西班牙'.encode('utf-8')
conn.set('country',x)print(conn.getrange('country',0,2).decode())#西
print(conn.getrange('country',0,8).decode())#西班
y='葡萄'.encode('utf-8')
conn.setrange('country',0,y)print(conn.getrange('country',0,8).decode())#按字节来计算 汉字三个字节
7、Getbit、setbit、bitcount的组合使用
比较有趣的功能
0 1 1 0 0 0 0 1 -> a
0 1 1 0 0 0 1 0 -> b
0 1 1 0 0 0 1 1 -> c
0 1 1 0 0 1 0 0 -> d
linux或windows环境中
127.0.0.1:6379[1]>set xxx abcd
OK127.0.0.1:6379[1]> setbit xxx 6 1(integer) 0127.0.0.1:6379[1]>get xxx"cbcd"
127.0.0.1:6379[1]>
在python中,通过getbit,setbit,bitcount来统计在线人数,在线状态。有效节省空间
for i in range(23):print(i,'---》',conn.getbit('key1',i))#知道保存在线人数的方法
print(conn.get('key1'))print(conn.bitcount('key1'))#字符1和数字1在ascii码的不同表示
8、Incr,decr自增、自减的使用
linux或windows环境中
127.0.0.1:6379[1]>incr k
(integer)1
127.0.0.1:6379[1]>incr k
(integer)2
127.0.0.1:6379[1]>incr k
(integer)3
127.0.0.1:6379[1]>get k"3"
127.0.0.1:6379[1]>decr k
(integer)2
127.0.0.1:6379[1]>get k"2"
127.0.0.1:6379[1]>
在python中
>>> importredis>>> x=redis.Redis('127.0.0.1',port='6379')>>> x.incr('i1')1
>>