Redis知识点总结
1 启动redis
redis-server redis.conf
2 停止redis
redis-cli SHUTDOWN
./redis-cli -h 127.0.0.1 -p 7000 -a sqoop SHUTDOWN
3 登录redis
redis-cli 提示:(error) NOAUTH Authentication required. 这是需要密码,可以输入以下命令
auth sqoop -->sqoop是密码
redis-cli -a password 可以带密码登入 -c 参数支持重定向
redis-cli -c -h 192.168.1.214 -p 6379 -a sqoop
4 集群安装
4.1 下载redis,安装redis
cd /data/redis-server
tar -zxvf redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
4.2 在redis-4.0.1目录下 创建目录
mkdir redis_cluste
cd redis_cluste
mkdir 7000 7001 7002 7003 7004 7005
cd redis-4.0.1
cp redis.conf redis_cluster/7000
...
cp redis.conf redis_cluster/7005
4.3 修改各节点下的redis.conf文件如下
port:7000
daemonize yes
pidfile /var/run/redis_7000.pid
cluster-enabled yes
cluster-config-file nodes-7000.conf
logfile "/home/Ruby/logs/redis/redis_7000.log"
masterauth sqoop
4.4 启动各节点
./redis-server ../redis_cluster/7000/redis.conf
...
./redis-server ../redis_cluster/7005/redis.conf
4.5 创建集群
find / -name 'client.rb'
vi /usr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb 中的DEFAULTS.password 为 masterauth参数配的密码
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
5 主备安装
5.1 在redis-4.0.1目录下 创建目录
mkdir redis_replica
cd redis_replica
mkdir master slave
cd redis-4.0.1
cp redis.conf redis_replica/master
cp redis.conf redis_replica/slave
5.2 修改主节点下的redis.conf文件如下
port:7006
daemonize yes
pidfile /var/run/redis_7006.pid
logfile "/home/Ruby/logs/redis/redis_7006.log"
masterauth sqoop
requirepass sqoop
5.3 修改从节点下的redis.conf文件如下
port:7007
daemonize yes
slaveof 192.168.1.214 7006
pidfile /var/run/redis_7007.pid
logfile "/home/Ruby/logs/redis/redis_7007.log"
masterauth sqoop
requirepass sqoop
6 Move All Keys Matching Pattern
eg : from 0 to 1
redis-cli --raw keys "$PATTERN" | xargs -L1 -I{} redis-cli move {} 1
7 查看当前Cluster的节点情况
cluster nodes
8 统计key的个数
· redis-cli -h 189.120.84.149 -p 6379 -a sqoop keys 'mon_person*' |wc -l
· dbsize
9 批量删除
慢删
redis-cli -a ${password} keys "*" | xargs redis-cli -a ${password} del
快速删
redis-cli -h ${host} -p ${port} -a ${password} --raw keys "$pattern" | xargs redis-cli -h ${host} -p ${port} -a ${password} del
举例
redis-cli -h 192.168.1.214 -p 7000 -a sqoop keys '*' |xargs -I {} echo '"{}"'|xargs redis-cli -h 192.168.1.214 -p 7000 -a sqoop del
redis-cli -h 189.120.84.149 -p 6379 -a sqoop keys 'test_ljh*' |xargs -I {} echo '"{}"'|xargs redis-cli -h 189.120.84.149 -a sqoop del
10 清空当前数据库中的所有 key
FLUSHDB
11 批理随机生成key
redis-benchmark -h 192.168.1.214 -p 6379 -a sqoop -c 50 -d 128 -r 6316 -t SET
12 Redis 禁用某些命令
(error) ERR unknown command 'CONFIG'
在redis.conf中增加,比如禁用config命令: rename-command config ""
13 maxmemory-policy 参数说明
在达到内存上限(maxmemory)时DCS将如何选择要删除的内容。有6个取值供选择:
volatile-lru:根据LRU算法删除设置了过期时间的键值。
allkeys-lru:根据LRU算法删除任一键值。
volatile-random:删除设置了过期时间的随机键值。
allkeys-random:删除一个随机键值。
volatile-ttl:删除即将过期的键值,即TTL值最小的键值。
noeviction:不删除任何键值,只是返回一个写错误
14 过期时间
命令格式: EXPIRE key seconds
返回: 成功返回 1, 失败或是键不存返回 0
PEXPIRE
15 一个键还有多久的时间会被删除
命令格式:TTL key
返回: 成功返回 存续时间秒数, 键不存返回 -2, 永久存在的键返回 -1
16 判断一个键是否存在
命令格式: EXISTS key
返回: 存在返回 1, 不存返回 0
17 事务
17.1 先发送MULTI命令(无参)
17.2 再依次发送需要执行的各种命令
17.3 发送EXEC 命令(无参)
17.4 集群不支持事务,但可以直接连单个master节点使用事务,如果是写操作需要注意key的slot 是在同一节点上
18 查看key对应的slot
cluster keyslot "key"
19 查看slot和节点的对应关系
cluster slots
20 Disadvantages of partitioning(分区的缺点)
Some features of Redis don't play very well with partitioning:
Redis的某些功能在分区中不能很好地发挥作用:
· Operations involving multiple keys are usually not supported. For instance you can't perform the intersection between two sets if they are stored in keys that are mapped to different Redis instances (actually there are ways to do this, but not directly).
操作涉及多个键时通常不支持。例如,如果两个集合的key存储在不同Redis实例中,那么您将无法得到它们的交集(实际上,有很多方法可以执行此操作,但不能直接执行)
· Redis transactions involving multiple keys can not be used.
事务涉及多个key 时无法使用。
· The partitioning granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set.
分区粒度是关键,因此无法将单个数据集大键(如非常大的排序集)进行分片.
· When partitioning is used, data handling is more complex, for instance you have to handle multiple RDB / AOF files, and to make a backup of your data you need to aggregate the persistence files from multiple instances and hosts.
使用分区时,数据处理会更加复杂,例如,您必须处理多个RDB / AOF文件,并且要备份数据,则需要从多个实例和主机聚合持久性文件。
· Adding and removing capacity can be complex. For instance Redis Cluster supports mostly transparent rebalancing of data with the ability to add and remove nodes at runtime, but other systems like client side partitioning and proxies don't support this feature. However a technique called Pre-sharding helps in this regard.
添加和删除容量可能很复杂。例如,Redis Cluster支持大多数透明的数据重新平衡,并能够在运行时添加和删除节点,但是其他系统(例如客户端分区和代理)不支持此功能。但是,在这方面,一种称为“ 预分片”的技术会有所帮助
21 Bigkey
21.1 bigkey查看方法
redis-cli -p 6380 --bigkeys
需要注意的是,这个bigkeys得到的最大,不一定是最大。说明原因前,首先说明bigkeys的原理,非常简单,通过scan命令遍历,各种不同数据结构的key,分别通过不同的命令得到最大的key:
· 如果是string结构,通过strlen判断;
· 如果是list结构,通过llen判断;
· 如果是hash结构,通过hlen判断;
· 如果是set结构,通过scard判断;
· 如果是sorted set结构,通过zcard判断。
21.2 Set类型的 bigkey如何抽取
21.3 ZSet 类型的bigkey如何抽取
21.3.1 使用 zrange
21.3.2 使用zscan
21.4 Hash类型的bigkey如何抽取
21.5 List类型的bigkey如何抽取
22Redis内存不足的缓存淘汰策略
noeviction:当内存使用超过配置的时候会返回错误,不会驱逐任何键
allkeys-lru:加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键
volatile-lru:加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键
allkeys-random:加入键的时候如果过限,从所有key随机删除
volatile-random:加入键的时候如果过限,从过期键的集合中随机驱逐
volatile-ttl:从配置了过期时间的键中驱逐马上就要过期的键
volatile-lfu:从所有配置了过期时间的键中驱逐使用频率最少的键
allkeys-lfu:从所有键中驱逐使用频率最少的键
23 LRU & LFU
LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。
LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。
LRU的最近最少使用实际上并不精确,考虑下图的情况,如果在|处删除,那么A距离的时间最久,但实际上A的使用频率要比B频繁,所以合理的淘汰策略应该是淘汰B。LFU就是为应对这种情况而生的。
- 点赞
- 收藏
- 关注作者
评论(0)