day09——Redis

Redis介绍和安装

# Redis:软件,存储数据的,速度非常快,Redis是一个key-value存储系统(没有表的概念),cs架构的软件
服务端 客户端(python作为客户端,java,go都可以,图形化界面,命令窗口的命令)
# es:存数据的地方 # 关系型数据库和非关系型数据库
关系型:mysql,PostgreSQL,Oracle,SQLserver,db2
去 IOE:国产化
IBM---》浪潮信息,曙光,联想
Oracle---》数据----》达梦。。。。
EMC存储---》国产存储
非关系型数据库(nosql):redis(缓存),MongoDB(json文档数据存储),es(大数据量存储)
nosql 指非关系型数据库:not only sql,对关系型数据库的补充 # Redis特点:
开源软件,存数据,cs架构
key-value存储,5大数据类型 value的类型是5种:字符串,hash(字典),列表,集合,有序集合
速度快:
1.纯内存存储(核心)
2.使用了IO多路复用的网络模型
3.数据操作是单线程,避免了线程间切换,而且没有锁,也不会数据错乱
支持持久化
纯内存,可以存到硬盘上,防止数据丢失
redis又被称为 缓存数据库

安装Redis

# redis 是用c语言编写的,需要在不同平台编译成可执行文件,才能在这个平台上运行
redis 使用了io多路复用中的epoll模型,win不支持epoll
redis官方,不支持win版本
微软官方,就把redis改动,编译成可执行,能运行在win上,滞后 3.x版本
第三方:5.x版本 # redis 官方网:https://redis.io/download/
# redis中文网:http://redis.cn
# win:3.x:https://github.com/microsoftarchive/redis/releases
# win:5.x:https://github.com/tporadowski/redis/releases/ # 安装:一路下一步
安装完成后,在安装路径下有
redis-cli.exe # mysql
redis-server.exe # mysqld
redis.windows-service.conf # my.ini
并且会自动做成服务
服务的命令:redis-server.exe redis.windows-service.conf # 启动redis服务端
1 命令行中 redis 就可以启动服务
2 命令行中,启动服务,并指定配置文件
redis-server 配置文件路径
3 使用服务启动 # 客户端链接
1 命令行客户端:
redis-cli # 默认连本地的6379端口
redis-cli -p 6379 -h 127.0.0.1
2 图形化客户端链接
1 最新版的Navicate支持链接redis了(收费的)
2 Redis Desktop Manager(https://resp.app/) 收费的 用的多 qt写图形化界面
qt是个平台,做GUI[图形化界面]开发
用c写,用python写 pyqt5
3 python的模块
pip install redis

Redis普通链接和连接池

1.普通链接

from redis import Redis

# 建立Redis链接
# conn = Redis()
conn = Redis(
host="127.0.0.1", # 链接地址
port=6379, # 链接端口 默认是6379
db=0, # 链接本地Redis的指定db 默认是0
decode_responses=True # 查询回来返回的结果是字符串类型,否则是byte格式,默认用utf-8编码
)
res = conn.get('name')
print(res) # 获取key名为name的value值
conn.close() # 关闭链接

2.连接池链接

# 一定要保证,池是单例的,以模块导入的形式做成了单例

# pool.py
import redis
POOL = redis.ConnectionPool(max_connections=1000,host='127.0.0.1',port=6379) # 其它.py
import redis
from pool import POOL # 模块导入的方式, 天然单例
conn = redis.Redis(connection_pool=POOL) # 以后拿到链接,是从POOL种取,如果没有可用的了,默认不阻塞,可以通过某个参数配置,设置阻塞等待
res = conn.get('name') # 获取key名为name的value值
print(res)
conn.close() # 关闭链接

Redis字符串类型

import redis
conn = redis.Redis() # 1 set(name, value, ex=None, px=None, nx=False, xx=False)
# 在Redis中设置值,默认,不存在则创建,存在则修改
"""
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
"""
# conn.set('age','18',ex=3)
# conn.set('age','18',px=3000)
# conn.set('age','20',nx=True)
# conn.set('age','20',xx=True) # 2 setnx(name, value)
# conn.setnx('age', '20') # 等同于conn.set('age', '20', nx=True) # 3 psetex(name, time_ms, value)
"""
参数:
time_ms,过期时间数字毫秒 或 timedelta对象
"""
# conn.psetex('hobby',3000,'足球') # 4 mset(*args, **kwargs) 批量设置
# conn.mset({'name':'xxx', 'age':'18'}) # 5 get(name) 获取值
# print(conn.get('name')) # 6 mget(keys, *args) 批量获取
# print(conn.mget('name', 'age')) # [b'xxx', b'18'] # 7 getset(name, value) 设置新值并获取原来的值
# print(conn.getset('name', 'zzz')) # b'yyy' # 8 getrange(key, start, end)
"""
参数:
start:起始位置(字节)
end:结束位置(字节)
"""
# print(conn.getrange('name', 0, 1)) # b'zz' 前闭后闭 # 9 setrange(name, offset, value)
# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
"""
参数:
offset:字符串的索引
value:要设置的值
"""
# conn.setrange('name',1,'abc') # 14 strlen(name)
# 返回name对应值的字节长度(一个汉字3个字节)
# print(conn.strlen('name')) # 15 incr(self, name, amount=1)
# 自增 name对应的值,当name不存在时,则创建,否则,则自增。
# conn.incr('age',amount=1)
# conn.incr('height',amount=1) # 16 incrbyfloat(self, name, amount=1.0)
# 同上 但amount可以是整型也可以是浮点型
# conn.incrbyfloat('height',amount=1.5)
# conn.incrbyfloat('height',amount=2) # 17 decr(self, name, amount=1)
# 自减 name对应的值,当name不存在时,则创建,否则,则自减。
# conn.decr('age',amount=1)
# conn.decr('xx',amount=1) # 18 append(key, value)
# conn.append('name','haha') # 重点掌握
get set strlen append

RedisHash类型

import redis
conn = redis.Redis(decode_responses=True)
# 1 hset(name, key, value)
"""
参数:
name,redis的name
key,name对应的hash中的key
value,name对应的hash中的value
"""
# conn.hset('userinfo','name','xxx') # 2 hmset(name, mapping) # 弃用了,还能用
"""
参数:
name:redis中的name
mapping:字典
"""
# conn.hmset('userinfo',{'age':'18','hobby':'足球'}) # 3 hget(name,key)
# print(conn.hget('userinfo', 'name')) # 4 hmget(name, keys, *args) 获取多个 两种写法
# print(conn.hmget('userinfo', ['name', 'age', 'hobby']))
# print(conn.hmget('userinfo','name','age','hobby')) # 5 hgetall(name) 获取所有的键值对 慎用,如果hash中key非常的,可能会撑爆内存
# print(conn.hgetall('userinfo')) # 6 hlen(name) 获取键值对的个数
# print(conn.hlen('userinfo')) # 7 hkeys(name) 获取对应的hash中所有的key的值
# print(conn.hkeys('userinfo')) # 8 hvals(name) 获取name对应的hash中所有的value的值
# print(conn.hvals('userinfo')) # 9 hexists(name, key) 判断userinfo是否存在这个键
# print(conn.hexists('userinfo','name')) # 10 hdel(name,*keys) 删除指定key的键值对
# conn.hdel('userinfo','hobby','age') # 11 hincrby(name, key, amount=1) 自增对应的hash中键值对的值
# conn.hincrby('userinfo','age',amount=1) # 12 hincrbyfloat(name, key, amount=1.0) 自增
# conn.hincrbyfloat('userinfo','height',amount=1.5) # 13 他们是一家
# for i in range(1000):
# conn.hset('hash_test','egg_%s' % i,'鸡蛋%s号' % i) # hscan(name, cursor=0, match=None, count=None) 分批获取,获取多少个,约等于,它不单独用
"""
参数:
cursor:游标(基于游标分批获取数据)
match:匹配指定key,默认none,表示所有
count:每次分批最少获取的个数 10
"""
# res = conn.hscan('hash_test', cursor=0, match=None, count=None)
# print(res)
# print(len(res[1]))
# res = conn.hscan('hash_test',cursor=0,count=10)
# print(res)
# print(len(res[1])) # hscan_iter(name, match=None, count=None) 获取所有,但是分批获取
for item in conn.hscan_iter('hash_test',count=10): # 取出所有,每次拿10条,用完再取10条,直到取完,内部使用了hscan+生成器
print(item)

Redis基础(一)——字符串、hash类型的基本使用的更多相关文章

  1. redis基础的字符串类型

    redis —— 第二篇 基础的字符串类型 我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞 ...

  2. Redis中Value使用hash类型的效率是普通String的两倍

    什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...

  3. Redis的String、Hash类型命令

    String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节.    Hash ...

  4. redis基础二----操作List类型

    1.lpush的使用方法 2.rpsuh的使用方法 3.删除元素 lrem中2值的是删除2个集合中的“b”元素 4. 通过上面的分析,redis中的list比较类型java的qunue队列

  5. Python(Redis 中 String/List/Hash 类型数据操作)

    1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...

  6. redis基础二----操作hash

    上面usr就是hash的名字,usr这个hash中存储了key 为id.name和age的值 一个hash相当于一个数据对象,里面可以存储key为id name age的值 2.批量插入一个hash数 ...

  7. redis字典快速映射+hash釜底抽薪+渐进式rehash | redis为什么那么快

    前言 相信你一定使用过新华字典吧!小时候不会读的字都是通过字典去查找的.在Redis中也存在相同功能叫做字典又称为符号表!是一种保存键值对的抽象数据结构 本篇仍然定位在[redis前传]系列中,因为本 ...

  8. 15天玩转redis —— 第二篇 基础的字符串类型

    我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞给char[]数组的. 如果你真的这么想的话 ...

  9. Redis学习笔记(2) Redis基础类型及命令之一

    1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...

  10. 【redis】02string类型和hash类型

    Redis的数据类型   Redis主要分为五个数据类型,一个是string,最简单的一个数据类型,hash,list, 还有set集合,还有zset有序集合,这是咱们redis的五种基础类型, 接下 ...

随机推荐

  1. openlayers.org 百度地图 静态化 同类产品

    openlayers 官网 https://openlayers.org/ 发现不好打开,修改dns 114.114.114.114 202.99.104.68 打开快了许多 https://blog ...

  2. ECharts 中国地图 vue

    <template> <div> <div id="china_map_box"> <div id="china_map&quo ...

  3. gcc编译stm32 f103出现错误init.c:(.text.__libc_init_array+0x20): undefined reference to `_init'

    解决方法: 方法一:去掉makefile中的编译选项:-nostartfiles 方法二:方法一不凑效的情况下,添加编译选型:--specs=nano.specs

  4. Kotlin学习快速入门(9)—— 密封类的使用

    原文地址: Kotlin学习快速入门(9)-- 密封类的使用 - Stars-One的杂货小窝 代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑,而密封类就是在这种情况下,方便 ...

  5. 云流化:XR扩展现实应用发展道路上的新方向

    扩展现实的发展已经改变了我们工作.生活和娱乐的方式,而且这才刚刚开始.扩展现实 (Extended reality, XR) 涵盖了沉浸式技术,包括虚拟现实.增强现实和混合现实.从游戏到虚拟制作再到产 ...

  6. Linux安装jdk和mysql

    Linux安装jdk和mysql JDK安装 操作步骤: 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux空jdk-8u171-inux-x64.tar.gz(这里注意自己 ...

  7. 记录--axios和loading不得不说的故事

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题.这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loa ...

  8. 【K8S】如何进入kubernetes的一个pod

    如何进入kubernetes的一个pod呢,其实和进入docker的一个容器相似: 进入docker容器 : docker exec -ti <your-container-name> / ...

  9. linux 安装mysql8.0.11

    1.使用系统的root账户 2.切换到/use/local 目录下 3.下载mysql ?wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysq ...

  10. 基于vivado中AXI的模型分析

    基于vivado中AXI的模型分析 1.底层代码 `timescale 1 ns / 1 ps module myip_v1_0_S00_AXI # ( // Users to add paramet ...