Redis
Redis在大量数据读取存储时,要注意读写分离,写入使用主库,读取使用从库,缓解主库压力
Redis连接
import redis
rc = redis.Redis(host=HOST, port=POST)
# 使用--raw时,中文输出不会乱码
redis-cli --raw -h HOST -p POST
import redis.clients.jedis.Jedis
redisClient = new Jedis(HOST, POST, timeout)
Redis基础操作
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
命令 | 操作 |
---|
DEL key | 删除key |
EXISTS key | 判断key是否存在 |
EXISTS key | 判断key是否存在 |
EXPIRE key seconds | 给key设置过期时间,以秒为单位 |
TTL key | 返回key过期时间 |
命令 | 操作 |
---|
SET key value | 查看长度 |
GET key 0 -1 | 查看内容 |
命令 | 操作 |
---|
HGETALL key | 获取key的所有内容,是一个字典 |
HGET key field | 获取key中某个字段的内容,是一个值 |
HMSET key map | 批量存储key的内容 |
HSET key field | 存储key中某个字段的内容 |
命令 | 操作 |
---|
LLEN key | 查看长度 |
LRANGE key 0 -1 | 查看所有内容 |
LRANGE key 0 -1 | 查看所有内容 |
LPOP key | 移出队列第一个元素 |
LPUSH key | 将元素插入队列头部 |
RPOP key | 移出队列最后一个元素 |
RPUSH key | 将元素插入队列尾部 |
命令 | 操作 |
---|
SADD key member | 添加元素 |
SREM key member | 删除元素 |
smembers key | 查看所有元素 |
Redis Pipeline
当数据量很大的时候,取redis不断链接需要耗费大量时间,因此可以使用pipeline批量进行数据操作,减少链接及通信时间
def pythonPipelineDemo:
pipe = rc.pipeline()
for key in keys:
pipe.hgetall(mid)
result = pipe.execute()
for i in range(len(keys)):
print keys[i], result[i]
import redis.clients.jedis.Jedis
import scala.collection.JavaConverters._
def scalaPipelineDemo() = {
val pipe = redis.pipelined()
keys.foreach(key => {
pipe.hgetAll(key)
})
val result = pipe.syncAndReturnAll().asScala
result.foreach(res => {
println(res)
})
}