redis介绍和安装、redis普通连接和连接池、字符串类型、hash类型、列表类型列表类型

文章目录

  • redis介绍和安装
    • 安装
        • 步骤
        • 启动,连接
  • redis普通连接和连接池
    • 普通连接
    • 连接池
  • redis字符串类型
  • redis hash类型
  • redis列表类型

redis介绍和安装

  1. redis 什么?
    • 数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样
    • 关系型数据库:mysql、oracle、sqlserver、postgrasql
    • 非关系型数据(no sql):redis,mongodb,clickhouse,infludb,elasticsearch,hadoop
      • 没有sql:没有sql语句
      • not olny sql 不仅仅是sql
    • redis:一款纯内存存储的非关系型数据库(数据都在内存),速度非常快

  2. redis特点:https://www.cnblogs.com/liuqingzheng/articles/9833534.html
    • redis是一个key-value存储系统
    • 数据类型丰富,支持5大数据类型:字符串,列表,hash(字典),集合,有序集合
    • 纯内存操作
    • 可以持久化:能都把内存数据,保存到硬盘上永久存储

  3. redis为什么这快?
    • 纯内存,减少io
    • 使用了 io多路复用的 epoll 网络模型
    • 数据操作是单线程,避免了线程间切换
      • 多个客户端同时操作,不会存在并发安全问题

安装

  1. 最新是7,公司里5、6比较多
  2. 开源软件,免费的,他们不支持win
    • epoll模型不支持win
  3. 微软官方:基于源码修改 ⇢ \dashrightarrow 编译成可执行文件
  4. 第三方:https://github.com/tporadowski/redis/releases/
步骤
  1. win:下载安装包,一路下一步
    • 安装目录在环境变量中:任意路径敲 redis-server reidis-cli 都能找到
    • redis做成了服务,以后通过服务启动即可
  2. mac:官网下载,解压即可
win,mac:两个可执行文件:
redis-server :等同于 mysqld
reidis-cli :等同于mysql
启动,连接
  1. 启动方式

    • 使用服务启动
    • 使用命令启动:redis-server
  2. 连接
    1.本地:redis-cli
    2.远端:redis-cli -h 地址 -p 端口(默认端口6379)

  3. 图形化客户端

    • resp: https://github.com/lework/RedisDesktopManager-Windows/releases
    • Navicate
      连接上发现有16个库
  4. 放值
    使用图形化客户端放入值

  5. 取值
    cmd中连接Redis后:get key

redis普通连接和连接池

  1. python 代码作为客户端—》连接

  2. 安装模块:pip install redis

普通连接

from redis import Redis

coon = Redis(host='localhost', port=6379, db=0, decode_responses=True)

res= coon.get('name')

print(res)

coon.close()

连接池

import redis
POOL = redis.ConnectionPool(host='localhost', port=6379, max_connections=50)

from threading import Thread


def task():
    coon = redis.Redis(connection_pool=POOL)
    print(coon.get('name'))
    coon.close()
    

if __name__ == '__main__':
    for i in range(5):
        t = Thread(target=task)
        t.start()

redis字符串类型

conn为实例化得到对象

  1. 新增或修改:conn.set(key, value, ex=None, px=None, nx=False, xx=False)
    • ex:过期时间(秒)
    • px:过期时间(毫秒)
    • nx:如果设置为True,则只有key不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
    • xx:如果设置为True,则只有key存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
  2. sex中nx为Ture:conn.setnx(key, value)
  3. sex中ex传值:conn.setex(name, value, time)
  4. sex中px传值:conn.psetex(name, time_ms, value)
  5. 批量新增或修改:conn.mset(*args, **kwargs)
  6. 获取值:conn.get(key)
  7. 批量获取值:conn.mget(keys, *args)
  8. 新增或修改值并返回之前的值:conn.getset(key, value)
  9. 获取start到end的字符:conn.getrange(key, start, end)
  10. 从offset位置开始修改成value:conn.setrange(key, offset, value)
  11. conn.setbit(key, offset, value)
  12. conn.getbit(key, offset)
  13. conn.bitcount(key, start=None, end=None)
  14. conn.bitop(operation, dest, *keys)
  15. 统计长度:conn.strlen(key)
  16. 自加整数:conn.incr(key, amount=1)
    key值为数字,amount默认1,执行一遍,值增加amount
  17. 自加浮点型:conn.incrbyfloat(key, amount=1.0)
  18. 自减整数:conn.decr(self, key, amount=1)
  19. 自减浮点型:conn.append(key, value)

redis hash类型

hash 类型,就是咱们python中的字典类型, 数据结构:数据的组织形式 底层存储 数组 ⇢ \dashrightarrow 根据key值使用hash函数得到结构,存到数组中
字典的key值必须可hash
字典的key值必须是不可变数据类型
hash 类型无序,跟放的先后顺序无关的
python 的字典是 有序的 字典+列表

  1. 新增或修改:conn.hset(name, key, value)
  2. 批量新增或修改:conn.hmset(name, mapping)
    conn.hmset('userinfo2',{'name':'pyy',"age":33})
    conn.hset('userinfo3',mapping={'name':'xxx',"age":33})
    
  3. 获取值:conn.hget(name,key)
  4. 批量获取值:conn.hmget(name, keys, *args)
  5. 取出hash中里的所有数据(k:v):conn.hgetall(name)
  6. 获取hash中数据数量:conn.hlen(name)
  7. 以列表获取所有key:conn.hkeys(name)
  8. 以列表获取所有value:conn.hvals(name)
  9. 验证hash中有无key值,返回布尔值:conn.hexists(name, key)
  10. 批量删除值:conn.hdel(name,*keys)
    conn.hdel('userinfo', 'age', 'hobby')
    
  11. 将key值自增:conn.hincrby(name, key, amount=1)
  12. 将key值自增(浮点型):conn.hincrbyfloat(name, key, amount=1.0)
  13. 从name中cursor位置取出count个值:conn.hscan(name, cursor=0, match=None, count=None)
  14. 一次性全取出,成迭代器:conn.hscan_iter(name, match=None, count=None)

redis列表类型

进行操作列表类型的表

  1. 从列表最左边数据新增:conn.lpush(name, values)
  2. 从列表最右边数据新增:conn.rpush(name, values)
  3. 列表name存在时,从左边新增:conn.lpushx(name, value)
  4. 列表name存在时,从右边新增:conn.rpushx(name, value)
  5. 获取列表长度:conn.llen(name)
  6. 以refvalue为参照物添加值:conn.linsert(name, where, refvalue, value))
    • 前:where=before
    • 后:where=after
  7. 修改indexconn.lset(name, index, value)
  8. 从左侧删count个value值:conn.lrem(name, count, value)
  9. 从列表左侧删除并弹出:conn.lpop(name)
  10. 从列表右侧删除并弹出:conn.rpop(name)
  11. 取出index位置的值:conn.lindex(name, index)
  12. 从start位置到end位置取出:conn.lrange(name, start, end)
  13. 留下从start位置到end位置,其他全部删除:conn.ltrim(name, start, end)
  14. 从列表src右侧弹出添加到dst左侧:conn.rpoplpush(src, dst)
  15. 从左侧阻塞式弹出:conn.blpop(keys, timeout)
    • 如果列表内没值,timeout(秒)时间到返回None
  16. 从左侧阻塞式删除弹出:conn.brpop(keys, timeout)
  17. 阻塞式从列表src右侧弹出添加到dst左侧:conn.brpoplpush(src, dst, timeout=0)

你可能感兴趣的:(路飞项目,redis,哈希算法,数据库)