首页 > 数据库 >Redis

Redis

时间:2023-03-07 19:11:26浏览次数:33  
标签:name Redis redis hobby 链接 conn

目录

Redis介绍与安装

redis 缓存数据库, 大部分时间做缓存,不仅仅可以做缓存。

非关系型数据库

C语言写的服务,用来存储数据,数据存在内存中,取值,存值速度都非常快。

redis快的原因

1.纯内存操作

2.网络模型使用的IO多路复用(可以处理的请求数更多)

  1. 6.x 版本之前,是单进程单线程架构,没有线程进程间的切换,消耗的资源更少。

官网下载

源码包安装,不支持windos系统

redis.io/download/
redis.cn/download.html  #中文网站

安装

mac  源码编译安装
linux 源码编译安装
windows  因epoll模型无法安装,但微软基于源码改动编译成了安装包

windows下载地址

下载msi文件

# 最新5.x版本
https://github.com/tporadowski/redis/releases/
# 最新3.x版本
https://github.com/microsoftarchive/redis/releases

image

image

安装完成后会释放两个命令,执行完毕会自动加到服务里

redis-server  # 类似 mysqld 服务端启动
redis-cli    # 类似 mysql 客户端启动

安装目录需要注意的文件

redis-server
redis-cli
redis.windows-service.conf 配置文件
	-bind  127.0.0.1 # 服务跑在的地址
	-port  6379    #监听的端口

启动redis

1. 服务中点击启动
 	后台启动
2. 使用命令
	redis-server 指定配置文件 不指定 默认

客户端连接redis

1  命令
	redis-cli  # 默认连接本地6379端口
2  远程连接方式
   redis-cli -h 127.0.0.1 -p 端口

存储方式

key : value形式存储,没有表

图形化客户端操作

可以百度搜

下载

Redis Desktop Manager 原来免费,现在收费了

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1699654

图形化工具连接redis服务器

image

进入可以看到一共有16个库,但是我们只用一个db0. 可以在配置文件中设置产生库的数量。

python连接redis

下载模块

pip install redis

导入模块

from redis import Redis

实例化得到对象

conn=Redis(host='127.0.0.1',port=6379)
参数:
db=0               # 指定库
socket_timeout = None  # 超时时间 
encoding='utf-8'      # 编码

设置值

conn.set('name','lxj')

使用conn对象操作redis

# 获取值
res=conn.get('name')  # 返回的数据时bytes格式
print(res)

关闭

conn.close()

代码


# 1.导入模块
from redis import Redis

# 2.实例化得到对象
conn = Redis(host='127.0.0.1',port=6379)

# 3.操作redis
res = conn.get('name')
print(res)

# 4 设置值
ret =conn.set('age',19)


# 5.关闭链接
conn.close()

链接池链接

多线程情况下链接是取链接池的链接与redis操作,目的为了不创建太多的链接数。

补充

django mysql 默认不带链接池一个请求就是一个mysql连接

如果使用链接池的话可能会有问题,并发数过高,导致mysql连接数过高,影响mysql性能

django连接池相关文档

https://blog.51cto.com/liangdongchang/5140039

不使用链接池链接redis

import redis
from redis import Redis
from threading import Thread

def task():
    # 实例化得到对象
    conn = Redis(host='127.0.0.1',port=6379)
    print(conn.get('name'))

# 开100个线程
for i in range(100):
    t=Thread(target=task)  # 每次都是一个新链接,会导致redis的链接数过多
    t.start()

使用链接池

import redis
from threading import Thread

# 使用redis链接池
"""
max_connections =    # 池的大小
"""
# 创建10个链接
POLL = redis.ConnectionPool(max_connections=10,host='127.0.0.1',port=6379)
def task():
    # 从池中拿一个链接
    conn = redis.Redis(connection_pool=POLL)  # 会报错,线程过多池里链接不够。有一个参数可以设置等待时间( 后面再说 )
    print(conn.get('name'))

# 开10个线程
for i in range(10):
    t=Thread(target=task)
    t.start()

把POLL做成单例性能更高,否则有可能在每一个线程中创建一个池,那就是10个线程x10个池,性能更低。要保证只有一个线程池

单例模式多线程链接池链接

创建一个py文件创建链接池

import redis
# 创建10个链接
POLL = redis.ConnectionPool(max_connections=10,host='127.0.0.1',port=6379)

导入使用

import redis
from threading import Thread
# 导入单例
from pool import POLL


def task():
    # 从池中拿一个链接
    conn = redis.Redis(connection_pool=POLL)
    print(conn.get('name'))

# 开10个线程
for i in range(10):
    t=Thread(target=task)  
    t.start()

Redis数据类型(value类型)

1.字符串 常用来做缓存 ,计数

2.列表 简单的消息队列

3.字典 (hash) 缓存

4.集合 去重

5.有序集合 常用来做排行榜

Redis之字符串类型

redis 是key-value形式存储,数据放在内存中,如果断电那么数据会丢失。 redis有持久化方案。

  • Redis提供了不同的持久性选项:
    • RDB
    • AOF

相关文档

https://www.cnblogs.com/wen-xin/p/11838603.html

字符串操作

set 改值
set(name, value, ex=None, px=None, nx=False, xx=False)
"""
ex = 过期时间(秒)
px = 过期时间(毫秒)
nx = True name存在set不会执行   nx=False 就会修改  不填则都会执行
xx = True hobby存在才会修改,不存在则不修改,xx=False hobby 不存在也会会新增
"""
# 存储一个爱好,3秒过期
conn.set('hobby','raper',ex=3)
# 3000毫秒过期
conn.set('hobby','raper',px=3000)
# name字段已存在 nx为True则不会修改内容
conn.set('name','lxj',nx=True)
# nx=False 就会修改
conn.set('name','lxj',nx=False)
# xx=Ture hobby存在才会修改,不存在则不修改
conn.set('hobby','篮球',xx=True)
# xx=False hobby 不存在也会会新增
conn.set('hobby','上网',xx=False)
conn.close()
get 取值
get(name)
# 取出来是bytes格式,以字节为单位
conn.get('name')
# 强转字符串
str(conn.get('name'),encoding='utf-8')
strlen 统计长度
strlen(name)
# 统计字节长度
conn.strlen('hobby')
incr 自增
incr(self,name,amount=1)
# 自增 不传默认1
conn.incr('age')

incrby 同样的功能
了解
1.setnx(name,value)
等同于 conn.set('name','lxj',nx=True)
# 字段存在不会修改
conn.setnx('name','刘亦菲')

2.setex(name,value,time)
等同于conn.set('wife','牛',ex=3)
# 3秒后过期,中间参数是时间
conn.setex('wife',3,'牛牛牛')


3.mset(*args,**kwargs)
# 传字典,批量设置值
conn.mset('wife':'牛牛牛','hobby':'小动物')

4.mget(keys,*args)
# 批量获取值,一次可以取多个拿出来是个列表
conn.mget('name','wife')

5.getset(name,value)
# 把第一个参数的值拿出来res接收的是这个值,并把redis库中的hobby值换成value
res=conn.getset('hobby','打篮球')

6.getrange(key,start,end)
# 范围内取值,以字节为单位的长度,字节不够拿一个字符则报错
conn.getrange('wife',0,2)

7.setrange(name,offset,value)
# 从第二个字节开始插入bbb
conn.setrange('wife',2,'bbb')

比特位操作
setbit(name,offset,value)
getbit(name,offset)
bitcount(key,start=None,end=None)

8 incrbyfloat(self,name,amount=1.0)
# 自增小数,数字精度不高
conn.incrbyfloat('age',1.2)

9 decr(self,name,amount=1)
decrby同样功能
# 自减1 不能带小数
conn.decrby('age')

10.append(key,value)
# 在原本hobby的值后面加上sb
conn.append('hobby','sb')

标签:name,Redis,redis,hobby,链接,conn
From: https://www.cnblogs.com/LiaJi/p/17189233.html

相关文章

  • redis 基础1(包含介绍,安装)
    Redis介绍安装#关于redis-1.redis是一个缓存型数据库【大部分时间做缓存,但是不仅仅可以做缓存】-2.redis是一个非关系型(nosql)数据库【区别于mysql】-3......
  • Ubuntu 通过 docker 运行 redis
    1、首先拉取redis的镜像dockerpullredis2、运行redis容器dockerrun--nameredis-p6379:6379-dredis--nameredis#容器实例的名称-p6......
  • 1 登录页面分析 2 登录页面 3 注册页面 4 Redis介绍与安装 5 Redis普通连接和连接池 6
    目录1登录页面分析1.1Login.vueHeader.vue2登录页面2.1Login.vue3注册页面Register.vueHeader.vue4Redis介绍与安装5Redis普通连接和连接池5.1普通连接5.2连接池......
  • redis缓存雪崩、击穿、穿透
    用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔......
  • Golang+Gin+ Redis Cluster
    最近用redisshake做redis数据迁移,由于redis提供的客户端没有用于查看集群的工具,且我部署的redis集群是基于k8s来构建的,没有使用ingress做转发,所以只能在k8s内部访问集群,于......
  • docker-compose搭建redis集群
    1、编写Redis配置文件#创建目录mkdir-p/home/docker/docker-redis/redis-cluster#切换至指定目录cd/home/docker/docker-redis/redis-cluster/#编写re......
  • 11_Redis
    Redis【简介&安装篇】-知乎(zhihu.com)【1】什么是redis,谈谈你对redis的理解redis就是一个数据库,不过与传统数据库不同的是,redis的数据是key-value存储在内存中的,......
  • make & make install安装Redis时失败报错
    问题描述:今天在安装redis服务时,执行make&makeinstall命令后出现下面这个错误zmalloc.h:50:31:fatalerror:jemalloc/jemalloc.h:Nosuchfileordirectory  ......
  • RedisDesktopManager工具本地服务端连接失败的问题
    观前提示,以下方法仅实践于本地服务端的连接测试。  在redis分布式运行后,需要对redis队列和指纹信息进行清除,但是,在打开RedisDesktopManager可视化工具进行连接时,发现总......
  • 内存耗尽后Redis会发生什么
    前言作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当Redis服务器的内存耗尽后,如果继续执行请求命令,Redis会如何处理呢?内存回收使用Redis服务时,很......