redis的连接方法|连接池|操作

Posted bai_nian_min_guo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis的连接方法|连接池|操作相关的知识,希望对你有一定的参考价值。

1、先看下redis的连接

import redis

# 连接服务端
r = redis.Redis(host="127.0.0.1",port=6379)

#获取所有的key值
print(r.keys())


#获取某个键的value
print(r.get("name"))

# 设置一个键值对
r.set("name","ddd",ex=3)

 

2、在看下redis的连接池,创建一个连接池,并且连接该连接池

connect_pool = redis.ConnectionPool(host="1.1.1.1",port=6379)

r = redis.Redis(connection_pool=connect_pool)

r.set("age",23,ex=2)
print(r.get("age"))

 

3、下面是redis的重点,操作包括dict,list,set,有序集合,hash的操作

# 3、操作
# 过期时间
#   ex 单位是秒钟
#   px 单位是毫秒
#   nx 如果设置为True,则只有name不存在时候,当前set操作才执行
#   xx 如果设置为True,则治愈后name存在的时候,当前set操作才执行

r.setnx()
#设置值,只有name不存在的时,执行设置操作

#批量get值
r.mget()

#批量设置值
r.mset()

#设置新的值然后获取老的值
r.getset()


# #获取value的子序列,根据字节提取,非字符
#    参数:
#         name Redis的name的值
#         start  起始位置字节
#         end    结束位置字节
r.getrange(key="name",start=1,end=2)


#修改字符串的内容,从指定的字符串索引开始向后替换,如果新的值过长,则向后添加
  # 参数:
  #       offset 字符串的索引,字节,一个汉字3个字节
  #       value   要设置的值
# r.setrange(name,offset,value)
# 比如name=12345
# r.setrange(name,2,"abcde")
# 最后name的值为1abcde



#对name对应的二进制表示的位进行操作
   # 参数
   #     name      redis的name
   #     offect    位的索引(将值变换成二进制后进行索引)
   #     value     值只能是1或者0
   #

# r.setbit(name,7,0)
#把name的value值用SCSI码表示,然后把第七位替换为0或者1
# r.setbit()


# 查看第6位的SCSI码数,从1开始数
# r.getbit("name",6)


#看一个例子,比如要统计uv,就是每天有多少用户访问我们的网站
# r.setbit("uv_count",id,1)

# r.setbit("uv_count",1,1)
# r.setbit("uv_count",2,1)
# r.setbit("uv_count",4,1)
# print(r.bitcount("uv_count"))

#先把uv_count的值设置为0,然后每个用户都有自己的id,那么每个用户过来,id为1,我们就把第1位设置为1,id为100,我们就把
#第100位设置为1,bitcount的方法就是统计value中的1的数量


# 返回value的长度,一个汉字是3个字节
print(r.strlen("name"))


#如果name存在,则自加1,如果name不存在,则创建name并赋值为1,统计pv的时候有用
# r.incr("name",1)

#和incr的效果一样,不过这个是自减
# r.decr()


#对name的value的值后面追加内容,追加的内容为aaaaa,就是拼接字符串
r.append("name","aaaa")



#Hash操作,存dict

# name             hash
#
# name1 ----------> k1-->v1
#                   k2-->v2
#                   k3-->v3
#
#
#
#
# name2 ----------> k1-->v1
#                   k2-->v2
#                   k3-->v3



# 单独设置hash
r.hset("stu_info","stu1","a")
r.hset("stu_info","stu2","b")
r.hset("stu_info","stu3","c")

#批量设置hash
r.hmget("stu_info",{"stu4":"d","stu5":"e","stu6":"f"})

# 获取指定的hash值
r.hget("stu_info","stu3")

#获取全部的hash值
r.hgetall("stu_info")


#获取name对应的hash中的键值对的个数
r.hlen()


#获取name对应的hash中所有的key的值
r.hkeys()


#获取name对应的hash中的所有的value的值
r.hvals()

#检测name对应的hash是否存储在当前传入的key
# r.hexists(name,value)


#将name对应的hash中指定的key键值对删除
# r.hdel()


#给name对应的hash中的key的value的值自加1
r.hincrby()




#list操作,存list

#添加元素,从左边push,从右边pus

r.lpush()
r.rpush()

#获取list的值,需要加一个范围
r.lrange("")

#获取长度
r.llen()


# 插入值
# r.linsert(name,where,refvalue,value)

# where = before|after
# refvalue  list中某个元素的值,在这个值后面获取前面插入一个值,在找到的第一个元素前面或者后面
# value    插入的值



# r.ltrim(name,start,end)
#在name对应的列表中移除没有在start-end索引之间的值



#set操作,集合操作,set集合就是不允许重复的列表

#最终的list中只有一个1和一个3,为name对应的集合添加元素
r.sadd("set_list","1","3","1")

#查看某个name的集合的元素,但是会带一个优先级
r.sscan()

#获取name对应的集合的元素的个数
r.scard()


#比较2个都在redis中的set的差集,求在set1对应的集合,且不在set2对应的集合的值的集合
r.sdiff("set1","set2")


#把a和b对应的集合存到c对应的集合中
r.sdiffstore("a","b","c")


#求name为a对应的集合和name为b对应的集合的交集
r.sinter("a","b")




#判断value是否在name对应的集合中

# r.sismember(name,value)



#获取某个name对应的集合的元素
r.smembers()



#将name为a对应的集合中的元素"c"移到name为b对应的集合中,a中就没有这个原始怒
r.smove("a","b","c")



#从集合的右侧(尾部)移除第一个成员,并将其返回
r.spop()

#删除随机的h获取number个元素
r.srandmember("name",20)


##删除某个值
r.srem()


#获取多个name对应的集合的并集
r.sunion()


#获取b、c、d。。。。。的集合的并集,并将结果保存到a对应的集合中
# r.sunionstore("a","b","d","d".....)


#有序集合的操作
#有序集合,在集合的基础上,为每个元素排序,元素的排序需要根据另外一个值来决定,
#元素有2个值,即值和分数,分数专门用来做排序

#值为a,分数为10,值为b,分数为4,分数小的靠前
r.zadd("name","a",10,"b",4)

#查看有序集合的元素的值
r.zscan()

#获取有序集合的长度
r.zcard()


#获取有序集合中分数在[min,max]之间的个数
r.zcount()

#可以自增有序集合中某个元素的分数
r.zincrby()


#获取name对应的集合中分数在34和59的元素
r.zrangebyscore("name",34,59)


#删除某个k
r.delete()


#判断某个k是否存在
r.exists()

#给某个k设置超时时间
r.expire()


#g重命名某个k的名字
r.rename()


#将name中的某个值移到db中
# r.move(name,db)



#随机获取个name的值,但是不删除
r.randomkey()


#获取name对应的值类型
r.type()


#redis默认有16个库
# select 2,切换到库2中

  

 

以上是关于redis的连接方法|连接池|操作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL与Redis数据库连接池介绍(图示+源码+代码演示)

Redis实战-Jedis连接池的使用方法

Redis实战-Jedis连接池的使用方法

python通过连接池连接redis,操作redis队列

RedisPool类使用Jedis操作Redis

python redis之连接池的原理