redis(普通连接和连接池、字符串类型、hash类型、列表类型)

1 redis普通连接和连接池
1.1 普通连接
1.2 连接池

2 redis字符串类型
3 redis hash类型
4 redis列表类型

1 redis普通连接和连接池

#1  python 代码作为客户端---》连接# 2 安装模块:pip install redis

在这里插入图片描述

1.1 普通连接

from redis import Redisconn = Redis(host="localhost",port=6379,db=0,decode_responses=True)res=conn.get('name')print(res)conn.close()

1.2 连接池

import redis
# 把池写成单例----》整个项目中,只有这一个实例(对象)---》python 中实现单例的5种方式---》模块导入的方式
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, max_connections=50)######import redis
from threading import Threadfrom pool import POOL
def task():conn = redis.Redis(connection_pool=POOL)print(conn.get('name'))conn.close()if __name__ == '__main__':for i in range(10):t = Thread(target=task)t.start()

2 redis字符串类型

'''
1 set(name, value, ex=None, px=None, nx=False, xx=False)
2 setnx(name, value)
3 setex(name, value, time)
4 psetex(name, time_ms, value)
5 mset(*args, **kwargs)
6 get(name)
7 mget(keys, *args)
8 getset(name, value)
9 getrange(key, start, end)
10 setrange(name, offset, value)
11 setbit(name, offset, value)
12 getbit(name, offset)
13 bitcount(key, start=None, end=None)
14 bitop(operation, dest, *keys)
15 strlen(name)
16 incr(self, name, amount=1)
# incrby
17 incrbyfloat(self, name, amount=1.0)
18 decr(self, name, amount=1)
19 append(key, value)
'''
代码演练19个字符串类型:import redisconn = redis.Redis(decode_responses=True)
# 1 set(name, value, ex=None, px=None, nx=False, xx=False)
# conn.set('age','19') # 没有就新增,有值就修改
# conn.set('hobby','篮球',ex=5) # ex过期时间 秒
# conn.set('hobby','篮球',px=5000)# 过期时间,毫秒
# conn.set('name','彭于晏')
# conn.set('name', 'lqz', nx=True)  # nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
# conn.set('name', 'lqz', xx=True)  # 如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值# 2 setnx(name, value)
# conn.setnx('name','彭于晏')# 3 setex(name, value, time)
# conn.setex('name',5,'sdasdfs')# 4 psetex(name, time_ms, value)
# conn.psetex('name',5000,'lqz')# 5 mset(*args, **kwargs)  批量设置
# conn.mset({'name': 'lqz', 'age': 29, 'gender': '男'})# 6 get(name)
# print(conn.get('name'))# 7 mget(keys, *args)
# print(conn.mget(['name','age']))
# print(conn.mget('name','age','gender'))# 8 getset(name, value)  # 等同于  get   set
# print(conn.getset('name','oooo'))# 9 getrange(key, start, end)
# print(conn.getrange('name',1,3))  # 前闭后闭区间# 10 setrange(name, offset, value)
# conn.setrange('name',2,'ooo') # 包含2# 先不聊---》操作比特位---》后面聊
# 11 setbit(name, offset, value)
# conn.setbit('name',7,1)  # l=[1 1 0 0 0 1 0 0 ]
# 12 getbit(name, offset)
# 13 bitcount(key, start=None, end=None)
# 14 bitop(operation, dest, *keys)# 15 strlen(name)
# print(conn.strlen('name'))# 16 incr(self, name, amount=1)
# conn.incr('age',2) # 自加1,单线程,没有并发安全,数据不会错乱,天然适合计数器  计数器---》日活(日活跃用户数,只要有用户登录,就+1)
# # incrby# 17 incrbyfloat(self, name, amount=1.0)
# conn.incrbyfloat('age',1.1)# 18 decr(self, name, amount=1)
# conn.decr('age')
# 19 append(key, value)
# conn.append('name','ooo')
conn.close()'''
set
get
getrange
strlen
'''

3 redis hash类型

'''
1 hset(name, key, value)
2 hmset(name, mapping)
3 hget(name,key)
4 hmget(name, keys, *args)
5 hgetall(name)
6 hlen(name)
7 hkeys(name)
8 hvals(name)
9 hexists(name, key)
10 hdel(name,*keys)
11 hincrby(name, key, amount=1)
12 hincrbyfloat(name, key, amount=1.0)
13 hscan(name, cursor=0, match=None, count=None)
14 hscan_iter(name, match=None, count=None)'''def hscan_iter(self,name,match= None,count= None):cursor = "0"while cursor != 0:cursor, data = self.hscan(name, cursor=cursor, match=match, count=count)yield from data.items()
代码演练14hash类型:'''  hash 类型,就是咱们python中的字典类型, 数据结构:数据的组织形式  底层存储 数组---》根据key值使用hash函数得到结构,存到数组中字典的key值必须可hash字典的key值必须是不可变数据类型hash 类型无序,跟放的先后顺序无关的python 的字典是 有序的  字典+列表'''# print(hash(1))
# print(hash('asdfasdf'))
# # print(hash([1,2,3,])) # unhashable
# print(hash((1,2,3))) # 不可变数据类型
# a={(1,2,3):8}
# print(a[(1,2,3)])# class Person(object):
#     pass
# p=Person()
#
# a={p:'asdf'}
# print(a[p])import redisconn = redis.Redis(decode_responses=True)
# 1 hset(name, key, value)
# conn.hset('userinfo','name','lqz')
# conn.hset('userinfo','age','19')# 2 hmset(name, mapping)  弃用了,统一用hset
# conn.hmset('userinfo2',{'name':'pyy',"age":33})
# conn.hset('userinfo3',mapping={'name':'xxx',"age":33})# 3 hget(name,key)
# print(conn.hget('userinfo','name'))
# 4 hmget(name, keys, *args)
# print(conn.hmget('userinfo',['name','age']))
# print(conn.hmget('userinfo','name','age'))# 5 hgetall(name)  # 慎用---》userinfo 对应的value值非常多,一次性拿出来,很耗时
# print(conn.hgetall('userinfo'))# 6 hlen(name)
# print(conn.hlen('userinfo'))# 7 hkeys(name)
# print(conn.hkeys('userinfo'))# 8 hvals(name)
# print(conn.hvals('userinfo'))# 9 hexists(name, key)
# print(conn.hexists('userinfo','hobby'))# 10 hdel(name,*keys)
# conn.hdel('userinfo',['name','age'])
# conn.hdel('userinfo','name','age')# 11 hincrby(name, key, amount=1)
# conn.hincrby('userinfo2','age')# 12 hincrbyfloat(name, key, amount=1.0)# 13 hscan(name, cursor=0, match=None, count=None)  # 不单独用
## 造数据
# for i in range(1000):
#     conn.hset('hash2','egg_%s'%i,'鸡蛋%s号'%i)# count 数字是大致的 大小,如果拿了10 ,可能是9 可能是11
# res=conn.hscan('hash2',cursor=0,count=10)   # 无序,所以不是从egg_0开始的
# print(len(res[1]))# 14 hscan_iter(name, match=None, count=None)  # 替代hgetall,一次性全取出值,如果占内存很大,会有风险 , 使用hscan_iter 分批获取值,内存占用很小
for item in conn.hscan_iter('hash2',count=10):print(item)# 分批获取数据conn.close()'''
hset
hget
hlen  
hexists
hincrby
hscan_iter
'''

4 redis列表类型

'''
1 lpush(name, values)
2 rpush(name, values) 表示从右向左操作
3 lpushx(name, value)
4 rpushx(name, value) 表示从右向左操作
5 llen(name)
6 linsert(name, where, refvalue, value))
7 r.lset(name, index, value)
8 r.lrem(name, value, num)
9 lpop(name)
10 rpop(name) 表示从右向左操作
11 lindex(name, index)
12 lrange(name, start, end)
13 ltrim(name, start, end)
14 rpoplpush(src, dst)
15 blpop(keys, timeout)
16 r.brpop(keys, timeout),从右向左获取数据
17 brpoplpush(src, dst, timeout=0)'''
代码演练17个列表类型:import redisconn = redis.Redis(decode_responses=True)# 1 lpush(name, values)
# conn.lpush('girls','刘亦菲','迪丽热巴')
# conn.lpush('girls','小红')# 2 rpush(name, values) 表示从右向左操作
# conn.rpush('girls', '小绿')# 3 lpushx(name, value)  #  只有key存在,才能追加
# conn.lpushx('girls','小紫')
conn.lpushx('girls1', '小紫')# 4 rpushx(name, value) 表示从右向左操作# 5 llen(name)
# print(conn.llen('girls'))# 6 linsert(name, where, refvalue, value))
# conn.linsert('girls', where='before', refvalue='刘亦菲', value='新刘亦菲')
# conn.linsert('girls', where='after', refvalue='刘亦菲', value='老刘亦菲')# 7 r.lset(name, index, value)
# conn.lset('girls',0,'oooo')  # 按索引修改某个位置值# 8 r.lrem(name, value, num)
# conn.lrem('girls',1,'刘亦菲')   # 从左侧删一个
# conn.lrem('girls',-1,'刘亦菲')   # 从右侧删一个
# conn.lrem('girls',0,'刘亦菲')   # 全删除# 9 lpop(name)
# print(conn.lpop('girls'))  # 左侧弹出一个
# print(conn.rpop('girls')) # 右侧弹出
# 10 rpop(name) 表示从右向左操作# 11 lindex(name, index)
# print(conn.lindex('girls',0))# 12 lrange(name, start, end)
# print(conn.lrange('girls',1,10000)) # 前闭后闭# 一次性把列表中数据都取出来
# print(conn.lrange('girls', 0, -1))   # 可以用-1
# print(conn.lrange('girls', 0, conn.llen('girls')))   # 可以用-1# 13 ltrim(name, start, end)
# conn.ltrim('girls',2,4)# 14 rpoplpush(src, dst)
# conn.rpoplpush('girls','girls')# 15 blpop(keys, timeout)  # block:阻塞   实现分布式的系统     消息队列
res=conn.blpop('girls',timeout=5)
print(res)# 16 r.brpop(keys, timeout),从右向左获取数据
# 17 brpoplpush(src, dst, timeout=0)conn.close()# utf-8 编码的 bytes格式
# b=b'\xe8\xbf\xaa\xe4\xb8\xbd\xe7\x83\xad\xe5\xb7\xb4'
# print(b.decode('utf-8'))
#
# for i in b:
#     print(bin(i))'''
lpush
rpush
llen
lrange
lpop
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium浏览器自动化怎么上传文件

Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展,文件上传的方式越来越多样。而有一些文件上传的控件,要做自动化控制会更复杂一些,这篇文章主要讨论在复杂情况下,如何通过自动化完成文件上传。 1. input 元素上传…

蓝桥杯每日一题2023.10.17

迷宫 - 蓝桥云课 (lanqiao.cn) 题目描述 样例: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 0100000000101010001101000010100000101010101100…

Ubuntu18中的连接网络图标恢复

上图的图标不存在,也连不上网。 输入命令停止网络管理 service NetworkManager stop删除网络管理缓存文件 sudo rm /var/lib/NetworkManager/NetworkManager.state重启网络管理 service NetworkManager start修改网络管理文件 将‘managedfalse’修改为‘man…

性能测试-JMeter分布式测试及其详细步骤

性能测试概要 性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多&#xff0c…

[常用组件]文本省略 + Tooltip提示

[常用组件]文本省略 Tooltip提示 很常用就对了 单行省略 .text {width: 100px;text-overflow: ellipsis;overflow: hidden;word-break: break-all;white-space: nowrap; }多行省略 .text{width: 100px;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;-we…

一文读懂PostgreSQL中的索引

前言 索引是加速搜索引擎检索数据的一种特殊表查询。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录…

官媒代运营:如何将内容营销做到深入人心

生活中,信息传递和有效的沟通是我们与世界互动的重要方式,而语言是这种互动的关键媒介。然而,在营销界,我们已经迈出了更深一步,将语言与内容相结合,以创造内容营销这一强大的战略工具。内容,作…

小程序入门及案例展示

目录 一、小程序简介 1.1 为什么要使用小程序 1.2 小程序可以干什么 二、前期准备 2.1 申请账号 2.2 开发工具下载与安装 三、电商案例演示 四、入门案例 4.1 项目结构解析 4.2 基础操作及语法 4.3 模拟器 4.4 案例演示 4.4.1 新建页面 4.4.2 头部样式设置 4.4.…

Oracle 控制文件的作用与控制文件创建

1、控制文件存储的数据信息 1) 数据库名称和数据库唯一标识符 (DBID),通过 select name,dbid from v$database; 查 询 DBID 和数据库名称 2) 创建数据库的时间戳 3) 有关数据文件、联机重做日志文件、归档重做日志文件的信息 4) 表空间信息 5) 检查点信息 6) 日志序…

linux 防火墙介绍以及iptables的使用

背景介绍 在前几天,于工发现我们内部的150服务器7554端口被外网访问了。该应用提供着内部的摄像头资源。为了避免被入侵,于是我添加了一些iptables规则,防止外网的访问。 解决方式 解决方式有两种: 关闭公司公网路由器对150服务…

论文阅读-多目标强化学习-envelope MOQ-learning

introduction 一种多目标强化学习算法,来自2019 Nips《A Generalized Algorithm for Multi-Objective Reinforcement Learning and Policy Adaptation》 总体思想 待补充 算法 虽然论文中用的是Q-learning的架构,但是在提供的代码中,采用…

神经网络量化----为了部署而特别设计

引言:一般神经网络量化有两个目的: 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算为了部署,某些平台上只支持整形运算,比如在芯片中 如果是第1个目的,则使用常规的量化手…

算法通关村第二关|青铜|链表反转

1.建立虚拟头结点辅助反转 1.1 反转链表:使用虚拟头结点辅助反转。 public ListNode reverseList(ListNode head) {ListNode ans new ListNode(0);ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next ans.next;ans.next cur;cur next;…

笙默考试管理系统-MyExamTest----codemirror(34)

笙默考试管理系统-MyExamTest----codemirror(34) 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试…

运行 `npm install` 时的常见问题与解决方案

运行 npm install 时的常见问题与解决方案 问题一:网络连接问题 描述: 运行 npm install 时,可能会遇到网络连接问题,导致无法正常下载依赖包。 报错示例: npm ERR! network connection timed outnpm ERR! connect…

【Rust基础④】Rust中的集合类型(Vector与HashMap)

文章目录 8 集合类型8.1 动态数组 Vector8.1.1 创建动态数组8.1.2 从 Vector 中读取元素8.1.3 迭代遍历 Vector 中的元素8.1.4 存储不同类型的元素 8.2 KV 存储 HashMap8.2.1 创建 HashMap使用 new 方法创建使用迭代器和 collect 方法创建 8.2.2 查询 HashMap8.2.3 更新 HashMa…

【财政金融】全国各地区财政收入与支出面板数据合集(2000-2022年)

数据简介:2000年到2022年中国经历了快速的经济发展和城市化进程,各地区的财政收入和支出也呈现出显著的增长和变化,全国各地区财政收入与支出的面板数据可用于评估经济发展水平和区域差距,通过比较不同地区之间的财政收入和支出水…

来来来,降温啦给女儿这么穿,好看又保暖

家人们谁懂啊!!! 时尚百搭有气质的羽绒服 小编强烈推荐哦! 防风保暖设计加三防工艺 简直不要太哇塞 怎么穿都好看哦

Java设计模式之亨元模式(Flyweight Pattern)

亨元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,其中许多对象具有相同的状态。通过共享相同的状态,亨元模式可以减少…

decltype关键字

获取表达式的类型 auto用于通过一个表达式在编译时确定待定义的变量类型,auto所修饰的变量必须被初始化,编译器需要通过初始化来确定auto所代表的类型,即必须要定义变量。若仅希望得到类型,而不需要(或不能&#xff09…