Redis介绍安装
# 关于redis -1.redis是一个缓存型数据库【大部分时间做缓存,但是不仅仅可以做缓存】 -2.redis是一个非关系型(nosql)数据库【区别于mysql】 -3.redis是c语言写的服务,用来存储数据,数据是存储到内存中,取值,放值速度非常快,10w qps # 面试题:redis为什么这么快 -1.纯内存操作 -2.网络模型使用的IO多路复用(epoll)(可以处理的请求数更多) -3.6.x之前,单进程,单线程架构,没有鲜葱进程间切换,更少的消耗资源 # redis使用 key-value的形式存储,没有表的概念 # 版本问题 最新的:7.x 公司里:5.x比较多 # 安装 - mac 源码编译安装 - linux 源码编译安装 - win 微软自己,基于源码改动编译为安装包 5.x 版本:https://github.com/tporadowski/redis/releases/ 3.x 版本:https://github.com/microsoftarchive/redis/releases - 一路下一步即可,安装完cmd执行两个命令,把redis自动添加到服务中 redis-server 服务端的启动命令 mysqld redis-cli 客户端的启动命令 mysql # 安装后的目录 redis-server redis-cli redis.window-service.conf 配置文件 -bind 127.0.0.1 # 服务跑的地址 -port 6379 # 监听的端口 # 启动redis 1.方式一: -在服务中,点击启动,后台启动 2.方式二: -redis-server 指定配置文件,不指定会按默认的 # 客户端连接redis 1.方式一 -redis-cli # 默认连接本地的6379端口 2.方式二 -redis-cli -h 地址 -p 端口 3.方式三 - 使用图形化客户端操作 -1.Redis Desktop Manager:
开源,现在收费,老版本免费(推荐) -> 底层使用Qt5,qt是个平台,专门用来图形化界面的 -> 可以使用c++写 -> 可以使用python写 pyqt5 使用python写图形化界面 (少量公司再用) -2.Redis Client:
小众 - 图形化界面,连接redis 输入地址和端口,点击连接即可 # redis默认有16个库,默认连进去就是第0个
Redis普通连接和连接池
# python 相当于客户端,操作redis # 安装模块: pip install redis # 补充: django中操作mysql,没有连接池的,一个请求就是一个mysql连接 - 可能存在问题 并发数过高,可能导致mysq'l连接数过高,进而影响mysql性能 - 使用django连接池: https://blog.51cto.com/liangdongchang/5140039
普通连接
# 1.安装redis模块 pip install redis # 2.导入模块的Redis类 from redis import Redis # 3.实例化得到对象 coon =Redis(host='127.0.0.1',port=6379) # 4.使用conn,操作redis - 获取name的值 ->res=conn.get('name') # 返回的数据是bytes格式 # 5.设置值 conn.set('age',19) conn.close()
连接池连接
###1.创建一个pool.py import redis # 创建一个大小为10的redis连接池 POOL = redis.ConnectionPool(max_connections=10,host='127.0.0.1',port=6379) ###2.测试代码 import redis from threading import Thread from pool import POOL def task(): # 做成模块后,导入,无论导入多少次,导入的都是那一个POOL对象 conn = redis.Redis(connection_pool=POOL) # 报错的原因是拿连接,连接池里不够了,没有等待,线程会报错,需要设置等待,参数 print(conn.get('name')) for i in range(10000): # 每次都是一个新的连接,会导致连接池的连接数过多 t=Thread(target=task) t.start() ### 单例模式 -1.单例模式是一种设计模式【设计模式共有23种】 - 全局只有一个 这个对象 p1=Person() # p1 对象 p2=Person() # p2 新对象 - 单例模式的六种方式...
Redis字符串类型
# 1.redis 是key-value形式存储 # 2.redis 数据放在内存中,如果断电,数据丢失 - 需要有持久化的方案 # 3.redis有5种数据类型【value类型】 - 字符串:用的最多,做缓存;做计数器 - 列表: 简单的消息队列 - 字典(hash):缓存 - 集合:去重 - 有序集合:排行榜 #字符串类型使用
''' 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) ''' import redis conn = redis.Redis() # 1 set(name, value, ex=None, px=None, nx=False, xx=False) # ex,过期时间(秒) # px,过期时间(毫秒) # nx,如果设置为True,则只有name不存在时,当前set操作才执行, 值存在,就修改不了,执行没效果 # xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值 # conn.set('hobby','篮球',ex=3) # conn.set('hobby','篮球',px=3) # conn.set('name','lqz',nx=True) # conn.set('name','lqz',nx=False) # conn.set('hobby','篮球',xx=True) # conn.set('hobby','篮球',xx=False) # redis---》实现分布式锁,底层基于nx实现的 # 2 setnx(name, value) # 等同于:conn.set('name','lqz',nx=True) # conn.setnx('name', '刘亦菲') # 3 setex(name, value, time) # 等同于:conn.set('name','lqz',ex=3) # conn.setex('wife', 3, '刘亦菲') # 4 psetex(name, time_ms, value) # conn.psetex('wife',3000,'刘亦菲') # 5 mset(*args, **kwargs) # conn.mset({'wife': '刘亦菲', 'hobby': '篮球'}) # 6 get(name) # print(str(conn.get('wife'),encoding='utf-8')) # print(conn.get('wife')) # 7 mget(keys, *args) # res=conn.mget('wife','hobby') # res=conn.mget(['wife','hobby']) # print(res) # 8 getset(name, value) # res=str(conn.getset('wife','迪丽热巴'),encoding='utf-8') # res=conn.getset('wife','迪丽热巴') # print(res) # 9 getrange(key, start, end) # res = str(conn.getrange('wife', 0, 2), encoding='utf-8') # 字节长度,不是字符长度 前闭后闭区间 # print(res) # 10 setrange(name, offset, value) # conn.setrange('wife',2,'bbb') # ---- 比特位---操作 # 11 setbit(name, offset, value) # 12 getbit(name, offset) # 13 bitcount(key, start=None, end=None) # ---- 比特位---操作 # 14 bitop(operation, dest, *keys) 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值 # 15 strlen(name) # res=conn.strlen('hobby') # 统计字节长度 # print(res) # 16 incr(self, name, amount=1) # 自增,不会出并发安全问题,单线程架构,并发量高 # conn.incr('age')
# # incrby
# 17 incrbyfloat(self, name, amount=1.0) # conn.incrbyfloat('age',1.2) # 18 decr(self, name, amount=1) # conn.decrby('age') # conn.decrby('age',-1) # 19 append(key, value) # conn.append('hobby','sb') print(conn.strlen('hobby')) conn.close() ''' 重要的: set get strlen 字节长度 incr '''
标签:set,name,包含,res,redis,value,安装,conn From: https://www.cnblogs.com/juzijunjun/p/17189232.html