美文网首页
redis常用操作

redis常用操作

作者: 华尔街的主导曲 | 来源:发表于2019-10-19 18:36 被阅读0次

    #Linux 下安装

    1.安装

    -----

    wget http://download.redis.io/releases/redis-2.8.17.tar.gz

    tar xzf redis-2.8.17.tar.gz

    cd redis-2.8.17

    make

    2.启动redis服务

    ------

    make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

    $ cd src

    $ ./redis-server

    注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

    $ cd src

    $ ./redis-server ../redis.conf

    -----------

    redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

    requirepass heng #requirepass 配置密码 heng

    ------------

    启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

    $ cd src

    $ ./redis-cli --raw 加raw防止中文乱码

    redis> AUTH heng #配置密码后要登录

    redis> set foo bar

    OK

    redis> get foo

    "bar"

    详细请参考:https://www.runoob.com/redis/redis-tutorial.html

    --------

    #设置密码

    通过以下命令查看是否设置了密码验证:

    CONFIG get requirepass

    1) "requirepass"

    2) ""

    默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

    你可以通过以下命令来修改该参数:

    127.0.0.1:6379> CONFIG set requirepass "heng"

    OK

    127.0.0.1:6379> CONFIG get requirepass

    1) "requirepass"

    2) "heng"

    设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。

    #密码登录

    AUTH heng

    3.常用命令

    help set 查看命令详细

    keys * # * 查看所有key ,a* 查以a开头的key

    #删除 (注:一般都是成功返回 1 失败返回 0)

    del key

    #检查key是否存在

    exists key

    #返回 key 所储存的值的类型

    type key

    #修改 key 的名称

    rename key newkey

    #仅当 newkey 不存在时,将 key 改名为 newkey

    renamenx key newkey

    #为给定 key 设置过期时间,以秒计

    EXPIRE key 3

    #移除 key 的过期时间,key 将持久保持。

    PERSIST key

    #切换到指定的数据库db 注:默认是16个,最多填15,默认是0

    select 1

    #将当前数据库的 key 移动到给定的数据库 db 当中。注:两个数据库有相同的 key 则移动失败

    MOVE key 1

    #以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)

    TTL key

    #从当前数据库中随机返回一个 key

    RANDOMKEY

    #删除当前数据库所有 key

    FLUSHDB

    #查看服务是否运行

    PING

    #关闭当前连接

    QUIT

    #同步保存数据到硬盘

    SAVE

    #删除所有数据库的所有key

    FLUSHALL

    #删除当前数据库的所有key

    FLUSHDB

    # string

    --------

    #设置

    set key value 如:ex 3

    参数:设置超时时间: ex 秒 px 毫秒 nx 没有值时才设置 xx 只有有值才设置

    mset key value key value #批量设置

    getset key value #设置的同时可以得到旧数据

    setrange key 3 value  #从第三位后设置

    #获取

    get key

    mget key key #批量获取

    getrange key 0 3 #切片获取

    #二进制操作用法(可用于根据id判断是否登录,登录设置为1,原理是全部设为零根据位数设置获取对应值)

    setbit user 3 1 #设置二进制第三位为1

    getbit user 3 #获取位数值 #当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

    bitcount user #获取设置为1的个数

    #将 key 中储存的数字值增一

    incr key

    # Hash

    ---------

    hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

    #设置

    hset obj key value # obj 对象名

    #批量设置

    hset obj key value key value

    #获取

    hget obj key

    hmget obj key key #批量获取

    hgetall obj #获取所有

    #获取对象key数

    hlen obj

    #获取对象key

    hkeys obj

    #获取对象key值

    hvals obj

    #判断是否存在

    hexists info key

    #删除哈希表 key 中的一个或多个指定字段

    hdel info key key

    #设置自增

    hincrby obj id 1

    #模糊查询

    hscan obj 0 match *a* #查询obj里从0开始查找带a的key

    ---------

    # list

    #添加

    lpush arr value vlaue # arr 列表名

    lpushx arr value # 只有arr存在才能添加

    #获取 arr 0 到 10 的数据

    lrange arr 0 10

    #获取列表长度

    llen key

    #通过索引获取列表中的元素

    lindex key index

    #在列表的元素前或者后插入元素(before | after)

    linsert arr before 11 10 #把10插到11之前

    #设置值

    lset arr 0 11 # 0 是索引 11 是值

    #删除

    lrem arr 0 11 #删除所有值为11的数据, 0 是所有,大于0是从头往后搜几位,小于0是从后往前几位

    #移出并获取列表的第一个元素

    lpop key

    #移除列表的最后一个元素,返回值为移除的元素

    rpop key

    ---------

    # set

    #添加

    sadd key value value

    #获取集合的成员数

    scard key

    #返回集合中的所有成员

    smembers key

    #移除集合中一个或多个成员

    srem key value vlaue

    #返回给定所有集合的差集

    sdiff key1 key2

    #返回给定所有集合的交集

    sinter key1 key2

    #返回所有给定集合的并集

    sunion key1 key2

    #判断 member 元素是否是集合 key 的成员

    sismember key member

    #返回集合中一个或多个随机数

    srandmember myset1 2

    #将 member 元素从 source 集合移动到 destination 集合

    smove source destination member

    #返回给定所有集合的差集并存储在 destination 中

    SDIFFSTORE destination key1 [key2]

    #返回给定所有集合的交集并存储在 destination 中

    SINTERSTORE destination key1 [key2]

    #所有给定集合的并集存储在 destination 集合中

    SUNIONSTORE destination key1 [key2]

    --------

    #有序集合

    #向有序集合添加一个或多个成员,或者更新已存在成员的分数

    zadd key 1 one 2 two # 1 2 是设置权重分数

    #获取有序集合的成员数

    ZCARD key

    #计算在有序集合中指定区间分数的成员数

    ZCOUNT key min max

    #移除有序集合中的一个或多个成员

    ZREM key member [member ...]

    #返回有序集合中指定成员的索引

    ZRANK key member

    #返回有序集中,成员的分数值

    ZSCORE key member

    #返回成员分数

    zscore

    #通过索引区间返回有序集合指定区间内的成员

    zrange key 0 -1

    #返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

    ZREVRANK key member

    #返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

    ZRANGEBYSCORE salary 5000 4000001 # 显示工资大于 5000 小于等于 400000 的成员

    --------

    #订阅发布

    #订阅一个或多个符合给定模式的频道

    PSUBSCRIBE pattern [pattern ...] 例:psubscribe test

    #订阅给定的一个或多个频道的信息

    SUBSCRIBE channel [channel ...] 例:subscribe test

    #查看订阅与发布系统状态,由活跃频道组成的列表

    PUBSUB subcommand [argument [argument ...]] 例:pubsub test

    #将信息发送到指定的频道

    PUBLISH channel message 例:publish test '老铁666'

    #退订所有给定模式的频道

    PUNSUBSCRIBE [pattern [pattern ...]]  例:punsubscribe test

    #指退订给定的频道

    UNSUBSCRIBE [channel [channel ...]] 例:unsubscribe test

    ---------------

    python连接redis

    pip3 install redis #安装

    ------------

    # 普通连接

    import redis

    r=redis.Redis(host="192.168.219.129",port=6379,password="heng",db=0)

    r.set("test","hello",ex=5) # ex代表秒,px代表毫秒

    val = r.get("test")

    print(val)

    # 连接池管道方式,相当于事务(效率最高)

    pool = redis.ConnectionPool(host="192.168.219.129", port=6379,password="heng",max_connections=1024)

    r = redis.Redis(connection_pool=pool)

    pipe=r.pipeline(transaction=True)

    pipe.get("test")

    pipe.keys("*")

    v=pipe.execute() #执行

    print(v)

    -----

    #发送订阅用法

    import redis

    class RedisHelper:

        def __init__(self):

            pool = redis.ConnectionPool(host="192.168.219.129", port=6379,password="heng",db=0)

            self.__conn=redis.Redis(connection_pool=pool)

            self.chan_sub='test1'

            self.chan_pub='test1'

        def publish(self,msg): #将信息发送到指定的频道

            self.__conn.publish(self.chan_pub,msg)

            return True

        def subscribe(self): #订阅给定的一个或多个频道的信息

            pub=self.__conn.pubsub() #初始化监听

            pub.subscribe(self.chan_sub) #设置地址

            pub.parse_response() #准备监听

            return pub

    obj=RedisHelper()

    #发送

    obj.publish('测试数据')

    #监听

    redis_sub=obj.subscribe()

    while True:

        msg=redis_sub.parse_response() #阻塞模式,没消息就等待

        print('message=>',msg)

    ------------

    django里使用redis

    #安装

    pip install django-redis

    # settings.py中加入以下内容

    CACHES = {

        'default': {

            'BACKEND': 'django_redis.cache.RedisCache',

            'LOCATION': 'redis://127.0.0.1:6379', #连接ip

            "OPTIONS": {

                "CLIENT_CLASS": "django_redis.client.DefaultClient",

                "PASSWORD": "password123", #密码

            },

        },

    }

    #使用

    from django.core.cache import cache #引入缓存模块

    val = cache.get("test")

    print(val)

    -----------

    #Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统

    #Celery的安装配置

    pip install celery

    相关文章

      网友评论

          本文标题:redis常用操作

          本文链接:https://www.haomeiwen.com/subject/mdenmctx.html