• Python3操作Redis最新版|CRUD基本操作(保姆级)



    Python3中类的高级语法及实战

    Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案

    Python3数据科学包系列(一):数据分析实战

    Python3数据科学包系列(二):数据分析实战

    Python3数据科学包系列(三):数据分析实战

    Win11查看安装的Python路径及安装的库

    Python PEP8 代码规范常见问题及解决方案

    Python3操作MySQL8.XX创建表|CRUD基本操作

    Python3操作SQLite3创建表主键自增长|CRUD基本操作

    anaconda3最新版安装|使用详情|Error: Please select a valid Python interpreter

    Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数

    Python函数绘图与高等代数互融实例(二):闪点函数

    Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线

    Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域

    Python函数绘图与高等代数互融实例(五): 则线图综合案例

    Python3操作MongoDb7最新版创建文档及CRUD基本操作



     Python3操作Redis官方详细文档

    Java OR Mapping  Redis文档: 

    Adding Redis OM Spring Java对象到Redis对象关系映射高级应用

    对象关系映射Maven三角坐标

    Python操作Redis高级方式: 异步操作Redis|管道|事务等操作 

    找准文档,对症下药,精准匹配,求人不如求文档,码农小菜鸟



                                                                  精准扶贫|保姆服务 


     



    一: Redis连接


    认知升维

    Python3连接Redis操作 StrictRedis跟Redis的区别在于,StrictRedis用于实现大部分官方命令,并使用官方的语法和命令,Redis是StrictRedis的子类,兼容一些老版本。 Redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。


    1. import redis
    2. """
    3. Python3连接Redis操作
    4. StrictRedis跟Redis的区别在于,StrictRedis用于实现大部分官方命令,并使用官方的语法和命令,Redis是StrictRedis的子类,兼容一些老版本。
    5. Redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。
    6. """
    7. print("当前python引入的Redis版本", redis.__version__)
    8. linkRedis = None
    9. try:
    10. linkRedis = redis.StrictRedis(host='192.168.1.111', port=6379, db=0) # 指定IP地址、端口、指定存放数据库
    11. # 如果指定一些其他参数,可以看源码,将需要的参数进行指定。
    12. print(linkRedis.dbsize())
    13. except Exception as err:
    14. print("redis连接异常: ", err)
    15. finally:
    16. if linkRedis is not None:
    17. print("释放连接资源")
    18. linkRedis.close()
    19. print("""
    20. 连接池:
    21. redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。每个redis实例都会维护一个自己的连接池。
    22. 可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
    23. """)
    24. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    25. redisLink = None
    26. try:
    27. redisLink = redis.Redis(connection_pool=pool)
    28. except Exception as err:
    29. print("redis连接异常: ", err)
    30. finally:
    31. if linkRedis is not None:
    32. print("redis连接还给连接池")
    33. redisLink.close()


    1. 运行效果:
    2. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorLinkcreate.py 
    3. 当前python引入的Redis版本 5.0.1
    4. 0
    5. 释放连接资源
    6.    连接池:
    7.        redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。每个redis实例都会维护一个自己的连接池。
    8.        可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
    9. redis连接还给连接池
    10. Process finished with exit code 0

    二: Python操作Redis插入数据


    1. import time
    2. import redis
    3. """
    4. Python3连接Redis插入数据
    5. """
    6. pool = None
    7. redisLink = None
    8. try:
    9. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    10. redisLink = redis.Redis(connection_pool=pool)
    11. result = redisLink.set('key', '你好,欢迎来到Python3操作(Redis7.2.0)Redis应用') # key 代表是键 value:hello redis 代表是值
    12. print("""
    13. 字符串操作,redis中的String再内存中按照一个name对应一个value来存储。
    14. set(name, value, ex=None, px=None, nx=False, xx=False)
    15. 再Redis中设置值,不存在则创建、存在即修改
    16. 参数:
    17. ex:过期时间(秒)
    18. px:过期时间(毫秒)
    19. nx:如果为True,当name不存在时,当前set操作会执行
    20. xx:如果为True,当name存在时,当前set操作会执行
    21. """)
    22. print(result) # 打印结果:True 说明设置成功
    23. print("获取Key对应的值: ", redisLink.get('key'))
    24. # ex: 设置过期时间(单位:秒) name为Key '老杨' 为value
    25. redisLink.set("name", "老杨", ex=3)
    26. time.sleep(1)
    27. resultValue = redisLink.get('name')
    28. print("请叫我:%s" % resultValue)
    29. time.sleep(3)
    30. print("3秒后请叫我无名小卒")
    31. print('name = %s' % (redisLink.get('name')))
    32. except Exception as err:
    33. print("redis连接异常: ", err)
    34. finally:
    35. print()
    36. if redisLink is not None:
    37. print("释放资源,连接还给连接池")
    38. redisLink.close()
    39. 运行效果:
    40. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorInsert.py 
    41. 字符串操作,redis中的String再内存中按照一个name对应一个value来存储。
    42. set(name, value, ex=None, px=None, nx=False, xx=False)
    43. 再Redis中设置值,不存在则创建、存在即修改
    44. 参数:
    45.     ex:过期时间(秒)
    46.     px:过期时间(毫秒)
    47.     nx:如果为True,当name不存在时,当前set操作会执行
    48.     xx:如果为True,当name存在时,当前set操作会执行
    49.     
    50. True
    51. 获取Key对应的值:  你好,欢迎来到Python3操作(Redis7.2.0)Redis应用
    52. 请叫我:老杨
    53. 3秒后请叫我无名小卒
    54. name = None
    55. 释放资源,连接还给连接池
    56. Process finished with exit code 0

    三: Python3操作Redis查询数据


    1. import time
    2. import redis
    3. """
    4. Python3连接Redis查询数据
    5. """
    6. pool = None
    7. redisLink = None
    8. try:
    9. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    10. redisLink = redis.Redis(connection_pool=pool, encoding='UTF-8')
    11. print("""
    12. getrange(key, start, end):
    13. 获取子序列(根据字节获取,非字符)
    14. 一个汉字3个字节 1个字母一个字节 每个字节8bit
    15. 参数:
    16. name:redis的name
    17. start:起始位置(字节)
    18. end:结束位置(字节)
    19. """)
    20. redisLink.set('detail', '详情信息')
    21. # 取索引号是0-2 前3位字节
    22. print(redisLink.getrange('detail', 0, 2))
    23. # 取所有的信息
    24. print(redisLink.getrange('detail', 0, -1))
    25. # 输出结果:详情信息
    26. redisLink.set('title', 'good')
    27. print(redisLink.getrange('title', 0, 2))
    28. # 输出结果:goo
    29. print(redisLink.getrange('title', 0, -1))
    30. # 输出结果:good
    31. print()
    32. print("""
    33. incr(name, amount=1):
    34. 自增name对应的值,当name不存在时,创建name=amount,存在则自增
    35. 参数:
    36. name:redis的name
    37. amount:自增数(必须是整数)
    38. """)
    39. print()
    40. # 自增name='incr' 每次自增 +1
    41. redisLink.incr('incr', amount=1)
    42. print(redisLink.get('incr'))
    43. # 输出结果:+1
    44. # 应用场景:记录页面的点击次数。
    45. print()
    46. print("""
    47. incrbyfloat(name, amount=1.0):
    48. 自增name对应得值,当name不存在时,创建name=amount,存在则自增
    49. 参数:
    50. name:redis的name
    51. amount:自然数(浮点数)
    52. """)
    53. # 设置name='num'
    54. redisLink.set('num', '0.00')
    55. print(redisLink.get('num'))
    56. # 输出结果:0.00
    57. # 自增浮点数
    58. redisLink.incrbyfloat('num', amount=1.0)
    59. print(redisLink.get('num'))
    60. print("""
    61. decr(name, amout=1):
    62. 自减name对应的值,当name不存在时,创建name=amount,存在则自增
    63. 参数:
    64. name:redis的name
    65. amount:自减数(整数)
    66. """)
    67. # 先查询name='num' 是否存在, 若存在 将对应的value 自减 1 ,不存在创建
    68. redisLink.decr('num', amount=1)
    69. print(redisLink.get('num'))
    70. # 输出结果: -1
    71. print()
    72. print("""
    73. append(key, value):
    74. 再redis name对应的值后面追加内容
    75. 参数:
    76. key:redis的name
    77. value:追加的字符串
    78. """)
    79. # 原name='name' 对应的value='老杨'
    80. redisLink.append('name', 'laogao')
    81. print('拼接后的字符串为: ', redisLink.mget('name'))
    82. # 输出结果:['老杨laogao'] 将value 拼接再一起
    83. print("操作列表")
    84. print()
    85. print("""
    86. lpush(name, values):
    87. 从左边新增加,不存在就新建
    88. """)
    89. # 往name='list' 中从左添加value=[11, 22, 33]
    90. redisLink.lpush('list', 11, 22, 33)
    91. print(redisLink.lrange('list', 0, -1))
    92. # 输出结果:['33', '22', '11'] 保存顺序为 33,22,11
    93. print("""
    94. rpush(name, values):
    95. 从右边新增加,不存在就新建
    96. """)
    97. # name='list1' 中从右添加value=[66, 55, 44]
    98. redisLink.rpush('list1', 66, 55, 44)
    99. print(redisLink.lrange('list1', 0, -1))
    100. # 输出结果:['66', '55', '44']
    101. print("""
    102. llen(name):
    103. 获取列表长度
    104. """)
    105. # 获取name='list1' 列表中的长度 value=[66, 55, 44]
    106. print(redisLink.llen('list1'))
    107. # 输出结果: 3
    108. print("""
    109. lpushx(name, value):
    110. 往已经有的name的列表的左边添加元素,没有的话无法创建
    111. """)
    112. # 首先redis数据库中没有name='list2'
    113. redisLink.lpushx('list2', 10)
    114. print(redisLink.lrange('list2', 0, -1))
    115. # 输出结果: []
    116. print("""
    117. rpushx(name, value):
    118. 往已经有的name的列表的右边添加元素,没有的话无法创建
    119. """)
    120. # 首先redis数据库中没有name='list2'
    121. redisLink.rpushx('list2', '10')
    122. print(redisLink.lrange('list2', 0, -1))
    123. # 输出结果: []
    124. print("""
    125. linsert(name, where, refvalue, value):
    126. 在name对应的列表的某一个值前或后插入一个新值
    127. 参数:
    128. name:redis的name
    129. where:BEFORE或AFTER
    130. refvalue:标杆值 (以它为基础, 前后插入新值)
    131. value:要插入的数据
    132. """)
    133. # 往列表中左边第一个出现的元素"66"前插入元素"77", 若name不存在, 不会新创建, 会返回[]
    134. redisLink.linsert('list1', 'before', '66', '77') # 目前数据库list1=[66, 55, 44]
    135. print(redisLink.lrange('list1', 0, -1))
    136. # 输出结果: ['77', '66', '55', '44']
    137. print("""
    138. lset(name, index, value):
    139. 对name对应的list中的某一个索引位置重新赋值
    140. 参数:
    141. name:redis的name
    142. index:list的索引位置
    143. value:要设置的新值
    144. """)
    145. # 将list1中索引为3, 替换成'33', list1=['77', '66', '55', '44']
    146. redisLink.lset('list1', 3, '33')
    147. print(redisLink.lrange('list1', 0, -1))
    148. # 输出结果: ['77', '66', '55', '33']
    149. print("""
    150. lrem(name, value, num):
    151. name对应的list中删除指定的值
    152. 参数:
    153. name:redis的name
    154. value:要删除得值
    155. num:num=0,删除列表中所有的值
    156. num=2,从前向后,删除2个;
    157. num=-2, 从后向前,删除2个;
    158. """)
    159. # list1=['77', '66', '55', '33']
    160. # 从左向右, 找到value='66' 删除一个
    161. redisLink.lrem("list1", 1, "66")
    162. print(redisLink.lrange('list1', 0, -1))
    163. # 输出结果:['77', '55', '33']
    164. # list1=['77', '55', '33']
    165. # 从右向左, 找到value='55', 删除一个
    166. redisLink.lrem('list1', -1, '55')
    167. print(redisLink.lrange('list1', 0, -1))
    168. # 输出结果:['77', '33']
    169. # list1=['77', '77', '33']
    170. # 删除name='list1'中 value='77'的所有值
    171. redisLink.lrem('list1', 0, '77')
    172. print(redisLink.lrange('list1', 0, -1))
    173. # 输出结果:
    174. print("""
    175. lpop(name) 、rpop(name):
    176. 在name对应的列表的左侧/右侧获取第一个元素并在列表中移除,返回值则是第一个元素
    177. """)
    178. # list1 = ['77', '66', '55']
    179. result = redisLink.lpop('list1')
    180. print(result) # 输出结果:77
    181. print(redisLink.lrange('list1', 0, -1)) # 输出结果:['66', '55']
    182. # list1 = ['66', '55']
    183. result = redisLink.rpop('list1')
    184. print(result) # 输出结果:55
    185. print(redisLink.lrange('list1', 0, -1)) # 输出结果:['66']
    186. print("""
    187. ltrim(name, start, end):
    188. name对应的列表中移除没有在start-end索引之间的值
    189. 参数:
    190. name:redis的name
    191. start:索引的起始位置
    192. end:索引的结束位置
    193. """)
    194. # list1=['77', '66', '55', '44', '33']
    195. # 删除name='list1'中, 不包含索引0-2的value
    196. redisLink.ltrim('list1', 0, 2)
    197. print(redisLink.lrange('list1', 0, -1))
    198. # 输出结果:['77', '66', '55']
    199. print()
    200. print("""
    201. lindex(name, index):
    202. 在name对应的列表中根据索引获取列表元素
    203. """)
    204. # list1=['77', '66', '55']
    205. # 取出name='list1'中索引为1的值
    206. print(redisLink.lindex('list1', 1)) # 输出结果:66
    207. print()
    208. print("""
    209. brpoplpush(src, dst, timeout=0):
    210. 从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
    211. 参数:
    212. src:取出并要移除元素的列表对应的name
    213. dst:要插入元素的列表对应的name
    214. timeout:当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
    215. """)
    216. # list = ['33', '22', '11']
    217. # list1 = ['77', '66', '55']
    218. # 将name='list1' 中的Value 全部插入到name='list'中
    219. redisLink.brpoplpush('list1', 'list', timeout=2)
    220. print(redisLink.lrange('list', 0, -1))
    221. # 输出结果:['77', '66', '55', '33', '22', '11']
    222. except Exception as err:
    223. print("redis连接异常: ", err)
    224. finally:
    225. print()
    226. if redisLink is not None:
    227. print("释放资源,连接还给连接池")
    228. redisLink.close()

    1. 运行效果:
    2. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorQuery.py 
    3.     getrange(key, start, end):
    4.     获取子序列(根据字节获取,非字符)
    5.     一个汉字3个字节 1个字母一个字节 每个字节8bit
    6.     参数:
    7.         name:redis的name
    8.         start:起始位置(字节)
    9.         end:结束位置(字节)
    10.     
    11. 详情信息
    12. goo
    13. good
    14.        incr(name, amount=1):
    15.         自增name对应的值,当name不存在时,创建name=amount,存在则自增
    16.         参数:
    17.             name:redis的name
    18.             amount:自增数(必须是整数)
    19.     
    20. 26
    21.        incrbyfloat(name, amount=1.0):
    22.             自增name对应得值,当name不存在时,创建name=amount,存在则自增
    23.             参数:
    24.                 name:redis的name
    25.                 amount:自然数(浮点数)
    26.     
    27. 0.00
    28. 1
    29.         decr(name, amout=1):
    30.         自减name对应的值,当name不存在时,创建name=amount,存在则自增
    31.         参数:
    32.             name:redis的name
    33.             amount:自减数(整数)
    34.     
    35. 0
    36.        append(key, value):
    37.         再redis name对应的值后面追加内容
    38.         参数:
    39.             key:redis的name
    40.             value:追加的字符串
    41.     
    42. 拼接后的字符串为:  ['老杨laogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogaolaogao']
    43. 操作列表
    44.         lpush(name, values):
    45.         从左边新增加,不存在就新建
    46.     
    47. ['33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11']
    48.        rpush(name, values):
    49.        从右边新增加,不存在就新建
    50.     
    51. ['33', '44', '33', '44', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '55', '44']
    52.       llen(name):
    53.       获取列表长度
    54.     
    55. 36
    56.        lpushx(name, value):
    57.        往已经有的name的列表的左边添加元素,没有的话无法创建
    58.     
    59. []
    60.       rpushx(name, value):
    61.       往已经有的name的列表的右边添加元素,没有的话无法创建
    62.     
    63. []
    64.        linsert(name, where, refvalue, value):
    65.         在name对应的列表的某一个值前或后插入一个新值
    66.         参数:
    67.         name:redis的name
    68.         where:BEFORE或AFTER
    69.         refvalue:标杆值 (以它为基础, 前后插入新值)
    70.         value:要插入的数据
    71.     
    72. ['33', '44', '33', '44', '55', '44', '77', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '55', '44']
    73.        lset(name, index, value):
    74.         对name对应的list中的某一个索引位置重新赋值
    75.         参数:
    76.         name:redis的name
    77.         index:list的索引位置
    78.         value:要设置的新值
    79.     
    80. ['33', '44', '33', '33', '55', '44', '77', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '55', '44']
    81.       lrem(name, value, num):
    82.         name对应的list中删除指定的值
    83.         参数:
    84.         name:redis的name
    85.         value:要删除得值
    86.         num:num=0,删除列表中所有的值
    87.         num=2,从前向后,删除2个;
    88.         num=-2, 从后向前,删除2个;
    89.     
    90. ['33', '44', '33', '33', '55', '44', '77', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '55', '44']
    91. ['33', '44', '33', '33', '55', '44', '77', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '44']
    92. ['33', '44', '33', '33', '55', '44', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '44']
    93.       lpop(name) 、rpop(name):
    94.         在name对应的列表的左侧/右侧获取第一个元素并在列表中移除,返回值则是第一个元素
    95.     
    96. 33
    97. ['44', '33', '33', '55', '44', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66', '44']
    98. 44
    99. ['44', '33', '33', '55', '44', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '55', '44', '66', '44', '66', '66']
    100.       ltrim(name, start, end):
    101.         name对应的列表中移除没有在start-end索引之间的值
    102.         参数:
    103.         name:redis的name
    104.         start:索引的起始位置
    105.         end:索引的结束位置
    106.     
    107. ['44', '33', '33']
    108.       lindex(name, index):
    109.         在name对应的列表中根据索引获取列表元素
    110.     
    111. 33
    112.       brpoplpush(src, dst, timeout=0):
    113.         从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
    114.         参数:
    115.             src:取出并要移除元素的列表对应的name
    116.             dst:要插入元素的列表对应的name
    117.             timeout:当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
    118.     
    119. ['33', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11']
    120. 释放资源,连接还给连接池
    121. Process finished with exit code 0

     

    四: Python3操作Redis删除数据


     

     

    1. import time
    2. import redis
    3. """
    4. Python3连接Redis删除数据
    5. """
    6. pool = None
    7. redisLink = None
    8. try:
    9. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    10. redisLink = redis.Redis(connection_pool=pool, encoding='UTF-8')
    11. print("""
    12. delete(*names) :
    13. 根据删除redis中的任意数据类型(string、hash、list、set、有序set)
    14. """)
    15. result = redisLink.delete('hash1') # 删除key为hash1的键值对
    16. print(result)
    17. result = redisLink.delete('name') # 删除key为name的值对
    18. print(result)
    19. result = redisLink.delete('list1') # 删除key为list1的值对
    20. print(result)
    21. except Exception as err:
    22. print("redis连接异常: ", err)
    23. finally:
    24. print()
    25. if redisLink is not None:
    26. print("释放资源,连接还给连接池")
    27. redisLink.close()
    28. 运行效果
    29. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorDelete.py 
    30.       delete(*names) :
    31.         根据删除redis中的任意数据类型(string、hashlistset、有序set
    32.     
    33. 0
    34. 1
    35. 1
    36. 释放资源,连接还给连接池
    37. Process finished with exit code 0

    五: Python3操作Redis常规操作

     
    

    1. import redis
    2. """
    3. Python3常规操作数据
    4. """
    5. pool = None
    6. redisLink = None
    7. try:
    8. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    9. redisLink = redis.Redis(connection_pool=pool, encoding='UTF-8')
    10. print("""
    11. exists(name):
    12. 检测redis的name是否存在,存在就是True,False 不存在
    13. """)
    14. print(redisLink.exists('hash1')) # 输出结果:False 说明key 不存在
    15. print(redisLink.exists('set1')) # 输出结果:True 说明key存在
    16. print(redisLink.exists('list1')) # 输出结果:True 说明key存在
    17. print(redisLink.exists('name')) # 输出结果:True 说明key存在
    18. print()
    19. print("""
    20. expire(name ,time) :
    21. 为某个redis的某个name设置超时时间
    22. """)
    23. redisLink.lpush('list5', 11, 22)
    24. redisLink.expire('list5', time=3)
    25. print(redisLink.lrange('list5', 0, -1))
    26. # 输出结果:['22', '11']
    27. import time
    28. time.sleep(3)
    29. print(redisLink.lrange('list5', 0, -1))
    30. # 输出结果:[]
    31. print()
    32. print("""
    33. rename(src, dst) :
    34. 对redis的name重命名
    35. """)
    36. redisLink.lpush('list5', 11, 22)
    37. print(redisLink.rename('list5', 'list-5'))
    38. # 输出结果: True 说明重命名成功
    39. print("""
    40. type(name) :
    41. 获取name对应值的类型
    42. """)
    43. print("""
    44. 查看所有元素
    45. """)
    46. print(redisLink.hscan("hash"))
    47. print(redisLink.sscan("set"))
    48. print(redisLink.zscan("zset"))
    49. print(redisLink.getrange("string", 0, -1))
    50. print(redisLink.lrange("list", 0, -1))
    51. print(redisLink.smembers("set3"))
    52. print(redisLink.zrange("zset3", 0, -1))
    53. print(redisLink.hgetall("hash1"))
    54. except Exception as err:
    55. print("redis连接异常: ", err)
    56. finally:
    57. print()
    58. if redisLink is not None:
    59. print("释放资源,连接还给连接池")
    60. redisLink.close()
    61. 运行效果:
    62. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorUpdate.py 
    63.        exists(name):
    64.         检测redis的name是否存在,存在就是TrueFalse 不存在
    65.     
    66. 0
    67. 0
    68. 0
    69. 1
    70.        expire(name ,time) :
    71.        为某个redis的某个name设置超时时间
    72.     
    73. ['22', '11']
    74. []
    75.       rename(src, dst) :
    76.         对redis的name重命名
    77.     
    78. True
    79.       type(name) :
    80.         获取name对应值的类型
    81.     
    82.        查看所有元素
    83.     
    84. (0, {})
    85. (0, [])
    86. (0, [])
    87. ['33', '33', '22', '11', '33', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11', '33', '22', '11']
    88. set()
    89. []
    90. {}
    91. 释放资源,连接还给连接池
    92. Process finished with exit code 0

     

     六: Python3操作Redis对Set集合操作

     
    

    1. import time
    2. import redis
    3. """
    4. Python3连接Redis集合Set数据操作
    5. """
    6. pool = None
    7. redisLink = None
    8. try:
    9. pool = redis.ConnectionPool(host='192.168.1.111', port=6379, decode_responses=True)
    10. redisLink = redis.Redis(connection_pool=pool, encoding='UTF-8')
    11. print("""
    12. sadd(name, values):
    13. name对应的集合中添加元素
    14. """)
    15. # 往集合中添加元素 name='set1'
    16. redisLink.sadd('set1', 1, 2, 3, 4, 5, 6)
    17. print(redisLink.smembers('set1'))
    18. # 输出结果:set(['1', '3', '2', '5', '4', '6'])
    19. print("""
    20. scard(name):
    21. name对应集合中元素个数
    22. """)
    23. # 'set1' = set(['1', '3', '2', '5', '4', '6'])
    24. print(redisLink.scard('set1'))
    25. # 输出结果: 6
    26. print("""
    27. smembers(name):
    28. name对应的集合所有成员
    29. """)
    30. # 获取name='set1' 中的所有values值
    31. print(redisLink.smembers('set1'))
    32. # 输出结果: set(['1', '3', '2', '5', '4', '6'])
    33. print("""
    34. sscan(name, cursor=0, match=None, count=None):
    35. name对应集合所有成员(元组形式)
    36. """)
    37. print(redisLink.sscan('set1'))
    38. # 输出结果:(0L, ['1', '2', '3', '4', '5', '6'])
    39. print("""
    40. sscan_iter(name, match=None, count=None):
    41. name对应集合所有成员(迭代器的方式)
    42. """)
    43. for item in redisLink.sscan_iter('set1'):
    44. print(item)
    45. print("""
    46. sdiff(key, *args):
    47. 求集合中的差集
    48. """)
    49. # name是set1、set2中values的值
    50. # set1 = set(['1', '3', '2', '5', '4', '6'])
    51. # set2 = set(['8', '5', '7', '6'])
    52. # 在集合set1中但是不在集合set2中的values值
    53. print(redisLink.sdiff('set1', 'set2'))
    54. # 输出结果:set(['1', '3', '2', '4'])
    55. # 在集合set2中但是不在集合set1中的values值
    56. print(redisLink.sdiff('set2', 'set1'))
    57. # 输出结果:set(['8', '7'])
    58. print("""
    59. sdiffstore(dest, keys, *args):
    60. 将两个集合中的差集,存储到第三个集合中
    61. """)
    62. # 在集合set1但是不再集合set3中的values值, 存储到set3集合中
    63. redisLink.sdiffstore('set3', 'set1', 'set2')
    64. print(redisLink.smembers('set3'))
    65. # 输出结果:set(['1', '3', '2', '4'])
    66. print("""
    67. sinter(keys,*args):
    68. 获取两个集合中的交集
    69. """)
    70. # 求集合set1与set2的交集
    71. print(redisLink.sinter('set1', 'set2'))
    72. print("""
    73. sunion(keys, *args):
    74. 获取多个name对应的集合并集
    75. """)
    76. # 获取set1与set2集合中的并集
    77. print(redisLink.sunion('set1', 'set2'))
    78. # 输出结果:set(['1', '3', '2', '5', '4', '7', '6', '8'])
    79. print("""
    80. sunionstore(dest, keys, *args):
    81. 将两个集合中的并集,存储到第三个集合中
    82. """)
    83. # 将set1与set2集合中的并集, 存储到set3中
    84. print(redisLink.sunionstore('set3', 'set1', 'set2'))
    85. print(redisLink.smembers('set3'))
    86. # 输出结果:set(['1', '3', '2', '5', '4', '7', '6', '8'])
    87. print("""
    88. sismember(name, value):
    89. 判断是否是集合的成员
    90. """)
    91. # 校验value=3 是否在name=set1集合中
    92. print(redisLink.sismember('set1', 3))
    93. # 输出结果:True表示在集合中
    94. print(redisLink.sismember('set1', 33))
    95. # 输出结果: False表示不在集合中
    96. print("""
    97. smove(src, dst, value):
    98. 将某个成员从一个集合中移动到另外一个集合
    99. """)
    100. # 目前集合set1、set2中的元素
    101. # set1=set(['1', '3', '2', '5', '4', '6'])
    102. # set2=set(['8', '5', '7', '6'])
    103. # 将set1中的value=4的元素, 移动到set2集合中
    104. redisLink.smove('set1', 'set2', 4)
    105. print(redisLink.smembers('set1'))
    106. # 输出结果:set(['1', '3', '2', '5', '6'])
    107. print(redisLink.smembers('set2'))
    108. # 输出结果:set(['8', '5', '4', '7', '6'])
    109. print("""
    110. spop(name):
    111. 从集合移除一个成员, 并将其返回(集合是无序的,所有移除也是随机的)
    112. """)
    113. # 目前set1集合中元素 set1=set(['1', '3', '2', '5', '6'])
    114. # 随机删除'set1'中的Value值
    115. print(redisLink.spop('set1'))
    116. # 输出结果:1 说明删除的个数
    117. print(redisLink.smembers('set1'))
    118. # 输出结果:set(['3', '2', '5', '6'])
    119. print("""
    120. srem(name, values):
    121. 在name对应的集合中删除某些值
    122. """)
    123. # 目前set1=set(['3', '2', '5', '6'])
    124. print(redisLink.srem('set1', 2))
    125. # 输出结果:1
    126. print(redisLink.smembers('set1'))
    127. # 输出结果:set(['3', '5', '6'])
    128. except Exception as err:
    129. print("redis连接异常: ", err)
    130. finally:
    131. print()
    132. if redisLink is not None:
    133. print("释放资源,连接还给连接池")
    134. redisLink.close()
    135. 运行效果:
    136. D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarRedisExecutorSet.py 
    137.        sadd(name, values):
    138.         name对应的集合中添加元素
    139.     
    140. {'1', '4', '6', '2', '5', '3'}
    141.        scard(name):
    142.         name对应集合中元素个数
    143.     
    144. 6
    145.       smembers(name):
    146.         name对应的集合所有成员
    147.     
    148. {'1', '4', '6', '2', '5', '3'}
    149.        sscan(name, cursor=0, match=None, count=None):
    150.         name对应集合所有成员(元组形式)
    151.     
    152. (0, ['1', '2', '3', '4', '5', '6'])
    153.       sscan_iter(name, match=None, count=None):
    154.         name对应集合所有成员(迭代器的方式)
    155.     
    156. 1
    157. 2
    158. 3
    159. 4
    160. 5
    161. 6
    162.       sdiff(key, *args):
    163.         求集合中的差集
    164.     
    165. {'1', '6', '2', '5', '3'}
    166. set()
    167.        sdiffstore(dest, keys, *args):
    168.         将两个集合中的差集,存储到第三个集合中
    169.     
    170. {'1', '6', '2', '5', '3'}
    171.        sinter(keys,*args):
    172.         获取两个集合中的交集
    173.     
    174. {'4'}
    175.         sunion(keys, *args):
    176.         获取多个name对应的集合并集
    177.     
    178. {'1', '4', '6', '2', '5', '3'}
    179.       sunionstore(dest, keys, *args):
    180.         将两个集合中的并集,存储到第三个集合中
    181.     
    182. 6
    183. {'1', '4', '6', '2', '5', '3'}
    184.       sismember(name, value):
    185.         判断是否是集合的成员
    186.     
    187. 1
    188. 0
    189.        smove(src, dst, value):
    190.         将某个成员从一个集合中移动到另外一个集合
    191.     
    192. {'1', '6', '2', '5', '3'}
    193. {'4'}
    194.        spop(name):
    195.         从集合移除一个成员, 并将其返回(集合是无序的,所有移除也是随机的)
    196.     
    197. 1
    198. {'5', '3', '2', '6'}
    199.        srem(name, values):
    200.         在name对应的集合中删除某些值
    201.     
    202. 1
    203. {'5', '3', '6'}
    204. 释放资源,连接还给连接池
    205. Process finished with exit code 0

     

    忙着去耍帅, 后期有时间补充完整......................

  • 相关阅读:
    【docker容器 redis密码没有生效解决办法】
    java List
    es(Elasticsearch)客户端Elasticsearch-head安装使用(03Elasticsearch-head安装篇)
    Java的垃圾回收机制详解——从入门到出土,学不会接着来砍我!
    gprof 分析程序执行时间和函数调用次数
    [软件安装] tmux安装及相关事项
    微泡排气除污装置有哪几种叫法吗?
    Redis 分布式锁
    运放电路中何时加入偏置电流补偿电阻-运算放大器
    redis-Modules(TairHash)
  • 原文地址:https://blog.csdn.net/u014635374/article/details/133623656