redis-其他应用

1.codis

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移 等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

2.twemproxy

是 Twtter 开源的一个 Redis 和 Memcache 代理服务器,主要用于管理 Redis 和 Memcached 集群, 减少与Cache 服务器直接连接的数量。

3.redis如何实现事物

import redis 
pool = redis.ConnectionPool(host='10.211.55.4', port=6379) 
conn = redis.Redis(connection_pool=pool) 
# pipe = r.pipeline(transaction=False) 
pipe = conn.pipeline(transaction=True) 
# 开始事务 
pipe.multi() 
pipe.set('name', 'bendere') 
pipe.set('role', 'sb') 
# 提交 
pipe.execute() 
#注意:咨询是否当前分布式redis是否支持事务

4.redis中watch命令的作用

# 在Redis的事务中,WATCH命令可用于提供CAS(check - and -set) 
# 功能。 
# 假设我们通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化, 
# EXEC命令执行的事务都将被放弃,同时返回Null 
# multi - bulk应答以通知调用者事务执行失败。 
# 面试题:你如何控制剩余的数量不会出问题? 
# 方式一:- 通过redis的watch实现 
import redis 
conn = redis.Redis(host='127.0.0.1', port=6379) 
# conn.set('count',1000)
val = conn.get('count') 
print(val) 
with conn.pipeline(transaction=True) as pipe:
# 先监视,自己的值没有被修改过 
conn.watch('count') 
# 事务开始 
pipe.multi() 
old_count = conn.get('count') 
count = int(old_count) 
print('现在剩余的商品有:%s', count) 
input("问媳妇让不让买?") 
pipe.set('count', count - 1) 
# 执行,把所有命令一次性推送过去 
pipe.execute() 

5.项目中redis性能的问题

我的项目中暂时没有遇到性能问题,不过我下来之后在学习Redis的时候,看到过一篇博客,写的很好,大概内容就是:
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3… 这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其 他不变。

6.Redis应用key很大,如何取出特定的key呢

# 通过scan_iter分片取,减少内存压力 
scan_iter(match=None, count=None)增量式迭代获取redis里匹配的的值 
# match,匹配指定key 
# count,每次分片最少获取个数 
r = redis.Redis(connection_pool=pool) 
for key in r.scan_iter(match='PREFIX_*', count=100000): 
  	print(key)

7.如何高效的找到redis中所有以oldboy开头的key

redis 有一个keys命令。

语法:KEYS pattern

说明:返回与指定模式相匹配的所用的keys。

该命令所支持的匹配模式如下:
1、?:用于匹配单个字符。例如,h?llo可以匹配hello、hallo和hxllo等;
2、:用于匹配零个或者多个字符。例如,hllo可以匹配hllo和heeeello等;
3、[]:可以用来指定模式的选择区间。例如h[ae]llo可以匹配hello和hallo,但是不能匹配hillo。同时,可以使 用“/”符号来转义特殊的字符

注意

KEYS 的速度非常快,但如果数据太大,内存可能会崩掉,
如果需要从一个数据集中查找特定的key,最好还是用Redis的集合结构(set)来代替。

posted @ 2020-03-14 21:29  enazede  阅读(218)  评论(0编辑  收藏  举报