Redis基础使用

Redis:Redis(REmote dictionary server)是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的key-value型数据库。value的值可以是 string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(sorted set-有序集合) 等类型。

ANSI:ANSI是一种字符代码,为使计算机支持更多语言,通常使用0x000x7f范围的1个字节来表示1个英文字符,超出此范围的使用0x800xFFFF来编码,即扩展的ANSCII编码。

BSD协议:BSD是Berkeley Software Distribution的缩写。BSD开源协议是一个给予使用者很大自由的协议:可以自由使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

Mac平台安装Redis

Redis下载地址 https://redis.io/download 下载最新版本并安装。

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make

make结束后 redis-5.0.5 目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序都位于安装目录src下。
接下来启动redis服务

cd src
./redis-server

这种启动方式使用的是默认配置,可以通过指定配置文件作为启动参数的方式启动redis。

cd src
./redis-server xxx/etc/redis.conf

也可以使用内置的客户端与Redis进行交互

src/redis-cli
127.0.0.1:6379> set name tony
OK
127.0.0.1:6379> get name
"tony"

若使用redis-cli方式启动redis,则退出可直接输入quit进行退出

127.0.0.1:6379> quit

若是使用redis-server方式启动可用下面方式关闭服务。

src/redis-cli -h 127.0.0.1 -p 6379 shutdown

Python操作Redis

1.安装redis模块

pip3 install redis

2.Python的redis模块提供两个类Redis和StrictRedis用于实现Redis的命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis模块。
创建一个Python脚本文件 redis_test.py

#!/usr/bin/env python

import redis


def test_redis():
    # 连接redis
    r = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
    r.set("name", "python")
    print(r.get("name"))


if __name__ == '__main__':
    test_redis()

3.Python的redis模块使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认每个Redis实例都会维护一个自己的连接池。可以建立一个连接池,然后将连接池作为参数传给Redis,就可以实现多个Redis实例共享一个连接池。

#!/usr/bin/env python

import redis


def test_redis():
    # 连接redis
    conn_pool = redis.ConnectionPool(host="127.0.0.1", port=6379, decode_responses=True)
    r = redis.Redis(connection_pool=conn_pool)

    # set()方法给key设置value,不存在则创建,存在则修改
    # set(name. value, ex=None, px=None. nx=False, xx=False)
    # ex-过期时间(秒)
    # px-过期时间(毫秒)
    # nx-若设置为True,则只有name不存在时,当前set操作才执行
    # xx-若设置为True,则只有name存在时,当前set操作才执行
    r.set("name", "python")

    # setex() psetex()和set中ex一样,可以设置过期时间
    # setex(name, time, value) time单位为秒
    # psetex(name, time_ms, value) time_ms单位为毫秒
    r.setex("address", 100, "beijing")
    r.psetex("hobby", 100, "game")

    # mset(mapping) 批量设置值
    r.mset({"k1":"v1", "k2":"v2"})

    # setrange() 从指定字符串索引开始向后替换字符串内容
    # setrange(name, offset, value) offset-字符串的索引
    r.setrange("name", 2, "l")

    # append(key, value) 往key里追加内容
    r.append("name", "isgood")

    # get(name) 获取值
    r.get("name")

    # mget(keys, args) 批量获取
    r.mget("name", "address")
    
    # getset(name, value) 设置新值并获取原来的值
    r.getset("name", "tom")

    # getrange(key, start, end) 根据字节获取
    # 若value是汉字,一个汉字占3个字节,如:"北京市" 0-3结果为"北"
    r.getrange("name", 0, 3)

    # strlen(name) 返回name对应值得字节长度(一个汉字3个字节)
    r.strlen("name")

    # incr(name, amount=1) incrbyfloat(name, amount=1.0)
    # name对应的value自增,若name不存在,则value初始化为amount
    # incrbyfloat() 的amount值为浮点型
    r.incr("age", amount=1)

    # decr(name, amount=1)
    # name对应的value自增,若name不存在,则value初始化为: 0-amount
    r.decr("age", amount=1)
    
    # list
    # llen(name) 返回name对应的list的length
    r.llen("students")

    # lpush(name, values) 在name对应的list中添加元素
    r.lpush("students", 2, 3)

    # lpushx(name, value) 当name存在时,将value添加到列表最左边
    r.lpushx("stuentds", "ccd")

    # insert(name, where, refvalue, value)
    # 将value插入name中refvalue的前边或者后边 where的值为after或者before
    # 如果refvalue不在name中将返回-1
    r.linsert("students", "after", 2, 6)

    # lset(name, index, value)
    # 更改列表name中指定下标的值
    r.lset("students", 2, "l")

    # lrem(name, count, value)
    # 删除列表name中指定的value值
    # count>0 从左到右删除
    # count<0 从右到左删除
    # count=0 删除所有等于value的值
    r.lrem("students", 2, 6)

    # lpop(name) 删除并返回列表name的第一个元素
    r.lpop("students")

    # lindex(name, index) 返回列表中指定索引位置的元素,支持负索引
    r.lindex("students", 3)

    # lrange(name, start, end) 返回列表name位于start和end之间的切片
    # start 和 end可以是负数,类似python中切片的负索引
    r.lrange("students", 0, -1)

    # ltrim(name, start, end)
    # 裁剪列表:移除列表中不在start和end之间的所有值
    r.ltrim("students", 2, -1)

    # rpoplpush(src, dst)
    # 取出列表src最右边的元素放入列表dst的最左边,并返回这个元素
    r.rpoplpush("students", "teachers")


if __name__ == '__main__':
    test_redis()

posted @ 2021-07-01 23:23  温茶又折花  阅读(50)  评论(0编辑  收藏  举报