redis笔记
redis下载与安装
windows下redis下载地址:
下载zip版本,在C盘根目录下(或者你想安装的目录下)解压
添加redis环境变量
注册redis服务
redis-server.exe --service-install redis.windows.conf --loglevel verbose
启动redis服务
redis-server.exe --service-start
下载redis可视化客户端软件RedisDesktopManager
下载地址:
python下安装redis绑定包
pip install redis
redis, mongodb与memcache对比
mongodb 直接持久化
redis 半持久化
memcache 只能在内存,轻量级缓存
redis简介
redis是一个key-value存储系统。和Memcached类似,支持的类型操作有: String操作, Hash操作, List操作, Set操作, Sort Set操作(zset)
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.
redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
python操作redis
edis-py提供两个类Redis和StrictRedis用于实现Redis的命令,
StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,
Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
string操作
set(name, value, ex=None, px=None, nx=False, xx=False)
setnx 、 setex 、 psetex
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,当前set操作才执行
批量设置
mset(args, **kwargs)
批量获取
mget(keys, args)
设置新值并获取原来的值
getset(name, value)
获取子序列(根据字节获取,非字符)
getrange(key, start, end)
修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
setrange(name, offset, value)
对name对应值的二进制进行位操作。
setbit(name, offset, value)
获取name对应的值的二进制表示中 1 的个数,应用场景:统计在线用户数有多少
bitcount(key, start=None, end=None)
自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
incr(self, name, amount=1)
incrbyfloat(self, name, amount=1.0)
自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
decr(self, name, amount=1)
在redis name对应的值后面追加内容
append(key, value)
Hash操作
Hash操作,redis中Hash在内存中的存储格式如下图:
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
hset(name, key, value)
在name对应的hash中批量设置键值对
hmset(name, mapping)
在name对应的hash中获取多个key的值
hmget(name, keys, args)
获取name对应的hash中键值对的个数
hlen(name)
检查name对应的hash是否存在当前传入的key
hexists(name, key)
将name对应的hash中指定key的键值对删除
hdel(name,keys)
自增name对应的hash中的指定key的值,不存在则创建key=amount
hincrby(name, key, amount=1)
hincrbyfloat(name, key, amount=1.0)
过滤,增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
hscan(name, cursor=0, match=None, count=None)
利用yield封装hscan创建生成器,实现分批去redis中获取数据
hscan_iter(name, match=None, count=None)
列表操作
lpush, lrange, rpush, lpushx, llen, linsert, lset, lrem, lpop, lindex, ltrim, rpoplpush, blpop, brpoplpush
集合操作
sadd, scard, sdiff, sdiffstore, sinter, sinterstore, sismenber, smove, spop, srandmenber, srem, sunion, sunionstore
有序集合(zset)
zadd, zcount, zincrby, zrank, zrem, zremrangebyrank, zremrankbyscore, zremrangebylex, zscore, zinterstore, zunionstore
|
|
其他操作
|
|
管道
redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,
如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。
|
|
发布订阅
收音机举例发布订阅
订阅方
发布方