import redis

# 连接服务端
r = redis.Redis(host="127.0.0.1", port=6379,db=0)
# 默认redis有16个数据库,这里的db是指我们要使用的数据库


# 1、string类型操作

"""
#在Redis中设置值,默认不存在则创建,存在则修改
red.set('key', 'value')
#参数:
#     set(name, value, ex=None, px=None, nx=False, xx=False)
#     ex,过期时间(秒)
#     px,过期时间(毫秒)
#     nx,如果设置为True,则只有key不存在时,当前set操作才执行,同#setnx(key, value)
#     xx,如果设置为True,则只有key存在时,当前set操作才执行

"""

"""
import time
r.set("key1","value1",ex=5)

print(r.get("key1"))
# b'value1
time.sleep(6)
print(r.get("key1"))
# None
"""


"""
r.set("key1","value1",ex=5)
r.setnx("key1","test1")   #==r.set("key1","test2",nx=True)
# setnx:只有当key不存在时,才会设置
print(r.get("key1"),"1")
# b'value1' 1
r.set("key1","test2",xx=True)
# 只有当key存在的时,才会设置

print(r.get("key1"),"2")
# b'test2' 2
"""


"""
r.set("key1","value1",ex=5)
r.set("key2","value2",ex=5)

print(r.mget(["key1","key2"]))
# 批量获取value

# [b'value1', b'value2']
"""


"""
r.mset({"key1":"value1","key2":"value2"})
#批量设置
print(r.mget(["key1","key2"]))
# [b'value1', b'value2']
"""


"""
r.set("name","zhang")

r.getset("name","wang")
#设置新的值,并且获取到旧的值

print(r.get("name"))
"""


"""
#getrange:获取value的子序列,根据字节提取,非字符,区间是闭区间,一个汉字是3个字节
#    参数:
#         name Redis的name的值
#         start  起始位置字节
#         end    结束位置字节
r.set("name","wang母亲")

print(r.getrange("name",start=0,end=6).decode())
# wang母

"""


"""
#修改字符串的内容,从指定的字符串索引开始向后替换,如果新的值过长,则向后添加
  # 参数:
  #       offset 字符串的索引,字节,一个汉字3个字节
  #       value   要设置的值


print(r.get("name").decode())
# wang母亲


r.setrange("name",offset=0,value="zang父")

print(r.get("name").decode())
# zang父亲

"""


# 对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)


"""
print(r.get("name").decode("utf-8"))
# zang父亲


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


"""
# key存在,则在key对应的value上加2
# key不存在,则创建key,并赋值为2
r.incr("age",2)

print(r.get("age"))

r.incr("age",2)

print(r.get("age"))

# key存在,则在key对应的value上减2
# key不存在,则创建key,并赋值为2
r.decr("age",3)
print(r.get("age"))

r.decr("count",12)
"""


"""
#在原有的values上追加字符串,相当于拼接
print(r.get("name").decode("utf-8"))
# zang父亲test1234

r.append("name","test1234")

print(r.get("name").decode("utf-8"))
# zang父亲test1234test1234
"""



# 2、Hash类型操作:这个意思就是name对应的是一个字典或者叫Hash

# 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")

print(r.hget("stu_info","stu3"))

# b'c'
"""


"""
#批量set和批量get
r.hmset("stu_info",{"stu4":"d","stu5":"e","stu6":"f"})

print(r.hmget("stu_info",["stu4","stu5"]))
# [b'd', b'e']
"""


"""
#获取name对应的dict
print(r.hgetall("stu_info"))
# {b'stu1': b'a', b'stu2': b'b', b'stu3': b'c', b'stu4': b'd', b'stu5': b'e', b'stu6': b'f'}
"""

"""
# 获取name对应的hash的key的个数
print(r.hlen("stu_info"))
# 6

"""

"""
# 获取name对应的key和value
print(r.hkeys("stu_info"))
# [b'stu1', b'stu2', b'stu3', b'stu4', b'stu5', b'stu6']

print(r.hvals("stu_info"))
# [b'a', b'b', b'c', b'd', b'e', b'f']
"""

"""
# 判断name对应的key是否存在
print(r.hexists("stu_info","test1"))
# False
print(r.hexists("stu_info","stu1"))
# True
"""


"""
# 删除name对应的hash的key
print(r.hdel("stu_info","stu1"))
# 1
print(r.hexists("stu_info","stu1"))
# False

"""

"""
# 对name对应的hash的key对应的value加指定的数
r.hset("stu_info","stu7",100)
print(r.hget("stu_info","stu7"))
# b'100'
r.hincrby("stu_info","stu7",100)
print(r.hget("stu_info","stu7"))
# b'200'
"""


# 3、List类型操作:这个意思就是name对应的是一个字典或者叫list

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


"""
# 从左边插入
# 从右边插入
#获取指定索引范围的值
r.lpush("listtest","list1","list2")
r.rpush("listtest","listA","listB")
#
print(r.lrange("listtest",start=0,end=10))
# [b'list2', b'list1', b'listA', b'listB']
"""



"""
# 获取长度
print(r.llen("listtest"))
# 4
"""


"""
# 插入值
r.linsert("listtest",where="before",refvalue="list1",value="list0")

print(r.lrange("listtest",start=0,end=10))

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

"""


"""
# 在name对应的列表中移除没有在start-end索引之间的值
r.ltrim("listtest",start=0,end=1)
print(r.lrange("listtest",start=0,end=10))
"""


"""
# 对指定索引的元素重新赋值,最后一个值的索引是-1
print(r.lrange("listtest",start=0,end=10))
# [b'list2', b'list0']
r.lset("listtest",1,"list3")

print(r.lrange("listtest",start=0,end=10))
# [b'list2', b'list3']
"""



"""
#删除name对应的list中的指定值
r.lrem("listtest",count=0,value="list3")

# 参数:
#    name:  redis的name
#    value: 要删除的值
#    count:   count=0 删除列表中所有的指定值;
#           count=2 从前到后,删除2个;
#           count=-2 从后向前,删除2个'''

print(r.lrange("listtest",start=0,end=10))
# [b'list2']
"""


"""
# 移除左侧的第一个元素
r.lpop("listtest")
print(r.lrange("listtest",start=0,end=10))
# []
"""


"""
# 移除右侧的第一个元素
# r.lpush("listtest","list1","list2")
# r.rpush("listtest","listA","listB")
print(r.lrange("listtest",start=0,end=10))
# [b'list2', b'list1', b'listA', b'listB']
r.rpop("listtest")
print(r.lrange("listtest",start=0,end=10))
# [b'list2', b'list1', b'listA']
"""

"""
#通过索引获取name对应的list的值
print(r.lindex("listtest",0))
# b'list2'
"""



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

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

# 查看某个name的集合的元素,但是会带一个优先级
print(r.sscan("set_list"))
# (0, [b'1', b'3'])

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



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

# 把a和b对应的集合存到c对应的集合中
# r.sdiffstore("a", "b", "c")
r.sadd("set_list","1","3","2")
r.sadd("set_list1","1","3","2","abc")
r.sadd("set_list2","1","a")

r.sdiffstore("set_list","set_list1","set_list2")
print(r.sscan("set_list2"))
print(r.sscan("set_list1"))

# 求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".....)





"""
# 删除某个k
# r.delete("set_list1")

# 判断某个k是否存在,存在为1,不存在为0
print(r.exists("set_list"))

# 给某个k设置超时时间
r.expire("set_list",time=2)

import time
time.sleep(5)

print(r.exists("set_list"))

"""

"""
# g重命名某个k的名字
r.rename("stu_info","stu_info1")

print(r.exists("stu_info"))

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



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

# b'k2'
# 获取name对应的值类型
print(r.type("stu_info"))


# b'hash'
"""


"""
# 清库操作
# flushdb(self,asynchronous=False)
#清空当前db中的数据,默认是同步。若开启异步asynchronous=True,会新起一个线程进行清空操作,不阻塞主线程

# flushall(self,asynchronous=False)
#清空所有db中的数据,默认是同步。异步同flushdb
"""


"""
#有序集合的操作
#有序集合,在集合的基础上,为每个元素排序,元素的排序需要根据另外一个值来决定,
#元素有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)
"""

 

posted on 2019-12-17 17:00  bainianminguo  阅读(92)  评论(0)    收藏  举报