一、Redis简介
目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了 读写速度,是实现网站高并发不可或缺的一部分。在分布式系统和WEB开发中得到广泛的应用
其存储的是非结构化的key-value数据,支持丰富的数据结构。Redis的5种对象类型:String字符串、hash哈希、list列表、set集合、zset有序集合。丰富的类型是redis相对于memcached等一大优势。
二、数据类型介绍
字符串:常用命令:set(赋值)/get(查询)/decr (自减)/incr(自增)/mget(查询多个key)等。
哈希:常用命令:hset(添加赋值)/hget(查询)/hgetall(查询所有字段和值)等。
列表是字符串的有序可重复结构:常用命令:lpush(列表头部添加元素)/rpush(列表尾部添加元素)/lpop(头部删除元素)/rpop(尾部删除元素)/lrange(查询元素)等。
set集合字符串的不重复无序结构。常用命令有sadd(添加元素)/spop(删除)/smembers(查询)/sunion(添加多个集合)等,
zset有序集合:sorted set在set基础上为每个元素都关联了一个分数score,通过score来实现排序功能。常用命令:zadd(添加)/zrange(查询)等
三、常用命令
string操作
rc.get(name) 返回数据库中key为name的String的value
hash操作
rc.hgetall(name) 从key为name的hash中获取所有映射键值对
rc.hget(name,key) 返回key为name的hash中field对应的value
rc.zrange(name,0,1,desc=False,withscores=True,score_cast_func=int)
'''参数:
name redis的name
start 有序集合索引起始位置
end 有序集合索引结束位置
desc 排序规则,默认按照分数从小到大排序
withscores 是否获取元素的分数,默认只获取元素的值
score_cast_func 对分数进行数据转换的函数'''
四、redis客户端
1)在mac下安装Redis Desktop Manager
2)在linux下安装redis-cli客户端
1.进入redis
./redis-cli -c -h ip -p port
2.查看redis下面的key
./redis-cli -c -h ip -p port keys biz:atcops:push_courier_num:*
3.删除key
del biz:atcops:push_courier_num:20181121
zset示例
ZADD KEY_NAME SCORE1 VALUE1....SCORE2 VALUE2
redis>ZADD myzset 1 "one"
redis>ZADD myzset 2 "two" 3 "three"
redis>ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) 1
3) "two"
4) 2
5) "three"
6) 3
redis>ZRANGE myzset 0 -1
1) "one"
2) "two"
3) "three"
如果带WITHSCORES参数,输出value和score的值,如果不带,只输出value的值
五、python脚本访问redis
python脚本访问redis集群
python包redis-py-cluster (1.3.5)
示例一:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from rediscluster import StrictRedisCluster
startup_nodes = [{"host": "ip", "port": "port1"},
{"host": "ip", "port": "port2"},
{"host": "ip", "port": "port3"}]
rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
print("支付单:",rc.get("biz:atcokc:aaid:v20181100:24841,-69979,[email protected]:area_period_pay_orders:20181113#24"))
print("接收单",rc.get("biz:atcokc:aaid:v20181100:24841,-69979,[email protected]:area_period_receive_orders:20181113#24"))
print("实时未接收单:",rc.get("biz:atcokc:unreceived:24932,-70015,[email protected]:v20181111:20181113"))
print("周完单量:",rc.hgetall("redenvelop2:re2:coid:933901"))
示例二:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from rediscluster import StrictRedisCluster
import sys
def redis_cluster():
redis_nodes = [{'host': 'ip', 'port': port1},
{'host': 'ip', 'port': port2},
{'host': 'ip', 'port': port3}]
try:
rc = StrictRedisCluster(startup_nodes=redis_nodes)
except Exception as e:
print("Connect Error!")
sys.exit(1)
keys = redisconn.keys('biz:atcokc:area_ac:*')
for key in keys:
arr = redisconn.zrange(key, 0, -1, withscores=True)
print('===========================' + '区域' + key.decode())
for k in arr:
if k[0].decode().find('933901') == 0:
print(k[0].decode(), k[1])
redis_cluster()