版本:
python 3.5
redis 3.0.1(redis的安装 pip install redis)
1、连接
import redis
r = redis.Redis(host='192.168.222.129', port='6379', db=0,password=password)
(这里通过本地远程连接redis的时候,会有一些问题,请见注一)
创建了redis实例后,就可以开始向redis中设置数据了:
2、使用连接池(connection pool)
就像我们在使用线程的时候,会选择线程池一样,redis的连接,我们也会选择使用connection pool来管理对一个redis server的所有连接,
避免每次建议释放连接的开销。默认每个redis实例都会维护一个自己的连接池。
当然我们也可以自己创建一个连接池,然后作为参数Redis,这样就可以实现多个redis实例共享一个连接池。
如下,我们创建了一个线程池,然后创建了两个redis实例,通过任何一个实例都可以获取到线程池中的成员。
3、redis常用API
1)String操作
使用格式:r.set(key, value, ex, px, nx, xx)
ex:过期时间(秒)
px:过期时间(毫秒)
nx:如果设置为True,只有在key不存在的时候才能成功执行
xx:如果设置为True,只有在key存在的时候才能成功执行
添加数据:r.set("name","fiona")
获取数据:r.get("name")
追加数据:r.append("name", " is cute!")
获取原值并重新赋值:r.getset("name","airo")
删除数据:r.delete("name")
默认自增1:r.incr("age", count=1) (如果key对应的value不能转化为数字,会报错,如果key不存在,会创建该key并赋值为0再执行自增1,可以指定count,就自增count)
增量:r.incrby("age") (同上)
自减1:r.decr("age") (同上)
减量:r.decrby("age") (同上)
批量设置:r.mset({"key1":"value1", "key2":"value2"})
批量获取:r.mget("key1", "key2")
2)hash
格式:r.hset(name, key, value)
设置数据:r.hset("myhash","name","fiona")
批量设置数据:r.hmset("myhash",{"name":"fiona","age":18})
获取数据:r.hget("myhash","name")
获取所有数据:r.hgetall("myhash")
获取指定成员值:r.hmget("myhash","name","age")
删除指定成员field:r.hdel("myhash","name")
删除整个hash key:r.delete("myhash")
增加:r.incrby("myhash","age", amount=1) (同上面string的incrby)
判断field是否存在:r.exists("myhash","age")
查看成员包含的fields个数:r.hlen("myhash")
查看成员包含的所有field:r.hkeys("myhash")
查看成员包含的所有values:r.hvals("myhash")
3)list
向list左边/右边插入数据:r.lpush("mylist","a",'b','c')、r.rpush("mylist",1,2 ,3)
查看list的值:r.lrange("myhash", 0,-1)、r.lrange("mylist",0,-2)
弹出左边/右边值:r.lpop("myhash")、r.rpop("mylist")
只有当key存在的时候,才能正确执行:r.lpushx("mylist1","aa")
从左到右删除指定个数的指定元素:r.lrem("mylist", 2,"a")
从右到左删除指定个数的指定元素:r.lrem("mylist",-2,'b')
删除所有的指定元素:r.lrem("mylist",0,'c')
删除指定key:r.delete("mylist")
替换指定位置的元素:r.lset("mylist", 1, "aaa") 将第二个元素设置为aaa
在某个元素之前/之后插入新的元素:r.linsert("mylist","before/after","aaa",'vvv')
从原列表中弹出最后一个元素并保存到新列表中:r.rpoplpush("mylist", "mylist1")
4)set
添加元素:r.sadd("myset","a",'b')
查看所有元素:r.smembers("myset")
判断某个元素是否存在集合中:r.sismember("myset","a")
求两个集合的差集:r.sdiff("myset","myset1")
求两个集合的差集并将差集保存在新的集合中:r.sdiffstore('newset',"myset","myset1")
求两个集合的并集:r.sunion("myset","myset1")
求两个集合的并集并将差集保存在新的集合中:r.sunionstore('newset',"myset","myset1")
求两个集合的交集:r.sinter("myset","myset1")
求两个集合的交集并将差集保存在新的集合中:r.sinterstore('newset',"myset","myset1")
求集合中元素的个数:r.scard("myset")
从集合中随机取出一个元素:r.srandmember("mylist")
5)zset
添加元素:r.zadd("myzset",)
注一:
1)如果远程连接报错‘由于目标计算机积极拒绝,无法连接’的错误,可能是以下几个原因导致的:
a)将配置文件中的bind 127.0.0.1 注释掉,这个限制了只允许本机访问
b)关闭redis的保护模式(protected-mode),这里的保护模式是指是否允许其他ip的设备访问redis,如果开启的话,就是只允许本机访问了。
c)给redis设置密码(requirepass)。如果只是Linux本机调试,可以跳过此步,但是如果要开放给外网访问,就必须给redis设置密码。
注意:以上的设置都仅仅只是用于基于学习环境,正式的开发生产环境是一定不能这样子设置的。
上面设置完成后,重启redis服务,再远程连接,应该就没有什么问题了。