Redis
2024-05-22 16:45:37 9 举报
AI智能生成
redis 笔记
作者其他创作
大纲/内容
Redis与 Memcached 的区别
1、Redis 支持持久化而 Memcached 不支持
2、Redis 可以存储五种复杂数据类型,而Memcached 只可以存储字符串类型数据
3、Redis 使用的是单线程+多路IO复用, 而Memcached 是多线程+锁
Redis 应用场景
1、查询最新n个数据 : 通过list 实现按照自然排序的数据
2、排行榜: 利用zset 实现
3、时效性的数据,比如手机验证码 : Expire 过期
4、计数器,秒杀 : 原子性,自增方法INCR、DECR
5、去除大量数据中的重复数据 : 利用Set 集合
6、构建队列 : 利用 list 集合
7、发布订阅消息系统 : pub/sub 模式
Redis命令
redis-server /配置文件路径 : 开启redis服务
redis-cli -h 127.0.0.1 -p 6379 : 开启客户端访问服务 (exit退出服务)
ping : 链接服务成功输出pong
shutdown : 关闭服务端
select [0,15] : redis默认创建16个数据库,一般使用0号库
key
key<b><font color="#ff0000">s</font></b> * :查询当前库的所有键
exist<b><font color="#ff0000">s </font></b> <key> :判断某个键是否存在(1:是,0:否)
type <key> :查看键的类型
del <key> :删除某个键 (1:是,0:否)
expire <key> <second> : 为键值设置过期时间,<b><font color="#7b1fa2">单位秒 </font></b>
ttl <key> : 查看key还有多少秒过期, <b><font color="#d32f2f">-1 表示永不过期 , -2 表示已经过期</font></b>
dbsize : 查看当前数据库的key的数量
<b><font color="#ff0000">flushdb : 清空当前库</font></b>
String
get <key> : 查询对应键值
set <key> <value> : 添加键值对
append <key> <value> :将给定的 <value> 的值追加到原值的末尾
strlen <key> : 获取值的长度
setnx <key> <value> :只有在key不存在时才设置key的值<br>
incr <key> :将key中存储的<b><font color="#ff0000">数字</font></b>值增加1; 只能对数字值操作,如果为空,<font color="#9c27b0"><b>新增值为1</b></font>
decr <key> :将key中存储的<b><font color="#0000ff">数字</font></b>值减1; 只能对数字值操作,如果为空,<font color="#fbc02d"><b>新增值为 -1</b></font>
incrby / decrby <key> <步长> :将key中存储的数字值增减。 自定义步长。
mset <key1> <value1> <key2> <value2> ... :同时设置一个或多个 key-value 对
mget <key1> <key2> ... : 同时获取一个或多个value
msetnx <key1> <value1> <key2> <value2> ... : 同时设置一个或多个 key-value 对,<b><font color="#b71c1c">当且仅当所有给定 key 都不存在</font></b>。
getrange <key> <起始位置> <结束位置> : 获得值的范围,类似java中的substring<br>
setrange <key> <起始位置> <value> : 用 <value> 覆写<key> 所储存的字符串值, 从<起始位置>开始。<br>
List
lpush/rpush <key> <value1> <value2> <value3> .... :从左边/右边插入一个或多个值<br>
lpop/rpop <key> :从左边/右边吐出一个值<br>
rpoplpush <key1> <key2> :从<key1>列表右边吐出一个值,插到<key2>列表左边
<b><font color="#e65100">lrange <key> <start> <stop> :按照索引下标获得元素(从左到右) lrange <key> 0 -1 获取查询列表的所有元素</font></b><br>
lindex <key> <index> :按照索引下标获得元素(从左到右) <b><font color="#9c27b0">lindex <key> -1 表示获取列表最后一个元素</font></b><br>
llen <key> : 获得列表长度 <br>
linsert <key> before/after <value> <newvalue> :在<value>的之前/之后插入<newvalue> 插入值
<b><font color="#0000ff">lrem <key> <n> <value> :删除n个value(n>0 从左往右删,n<0 从右往左删, n=0 删除所有)</font></b><br>
Set
sadd <key> <value1> <value2> ..... :将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略<br>
<b><font color="#f57f17">smembers <key> :取出该集合的所有值</font></b><br>
sismember <key> <value> :判断集合<key>是否为含有该<value>值,有返回1,没有返回0<br>
<b><font color="#ff00ff">scard <key> :返回该集合的元素个数</font></b><br>
srem <key> <value1> <value2> .... :删除集合中的某个元素<br>
spop <key> : 随机从该集合中吐出一个值<br>
srandmember <key> <n> :随机从该集合中取出n个值,不会从集合中删除<br>
sinter <key1> <key2> :返回两个集合的交集元素<br>
sunion <key1> <key2> :返回两个集合的并集元素<br>
sdiff <key1> <key2> :返回两个集合的差集元素<br>
Hash
hset <key> <field> <value> : 给<key>集合中的 <field>键赋值<value><br>
hget <key1> <field> :从<key1>集合<field> 取出 value<br>
hmset <key1> <field1> <value1> <field2> <value2>... :批量设置hash的值<br>
hexists key <field> :查看哈希表 key 中,给定域 field 是否存在<br>
<b><font color="#00ff00">hkeys <key></font><font color="#ffeb3b"> </font></b> :列出该hash集合的所有field<br>
<b><font color="#0000ff">hvals <key></font></b> :列出该hash集合的所有value<br>
hincrby <key> <field> <increment> :为哈希表 key 中的域 field 的值加上增量 increment <br>
hsetnx <key> <field> <value> : 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在<br>
Zset
zadd <key> <score1> <value1> <score2> <value2>... : 将一个或多个 member 元素及其 score 值加入到有序集 key 当<br>
zrange <key> <start> <stop> [WITHSCORES] : 返回有序集 key 中,下标在<start> <stop>之间的元素带WITHSCORES,可以让分数一起和值返回到结果集<br>
zrangebyscore key min max [withscores] [limit offset count] :返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列<br>
zrevrangebyscore key max min [withscores] [limit offset count] : 同上,改为从大到小排列。<br>
zincrby <key> <increment> <value> :为元素的score加上增量 <br>
zrem <key> <value> :删除该集合下,指定值的元素 <br>
zcount <key> <min> <max> :统计该集合,分数区间内的元素个数 <br>
zrank <key> <value> : 返回该值在集合中的排名,从0开始
Redis 配置文件
<b><font color="#ff00ff">includ</font></b> /路径 :引入其他的redis 配置文件
bind : 绑定ip 地址(默认是 127.0.0.1), <b><font color="#fbc02d">要想远程访问,注释掉bind ,并且关闭保护模式 protected-mode yes —> no </font></b>
protected-mode : 保护模式,只允许配置的ip 地址访问
tcp-bocklog :一个请求到达后至到接受进程处理前的队列
timeout :一个空闲的客户端维持多少秒会关闭, 0 为永不关闭
TCP keepalive :对访问客户端的一种心跳检测,每个 n 秒检测一次 (官方推荐 60 秒)
<b><font color="#0000ff">daemonize : 是否为后台进程</font></b>
<b><font color="#0000ff">pidfile</font></b> : 存放 pid 文件的位置,每个实例会产生一个不同的pid 文件
<b><font color="#f57f17">dir</font></b> :配置文件路径下存放 (RDB 和 AOF 存放路径)
loglevel :日志级别(debug 调试 - verbose 冗长 - notice 通知 - warning 警告)
logfile :日志文件名
syslog :是否将 redis 日志输送到 linux 系统日志服务中
syslog-ident : 日志的标识
<b><font color="#ff0000">requirepass : 设置密码(</font></b>登录之后要使用命令 auth "yourpassword" 才能访问 redis 数据库<b><font color="#ff0000">)</font></b>
maxclient : 最大客户连接数
<b><font color="#ff0000">maxmemory : 设置 redis 可以使用的内存量</font></b>。一旦到达内存使用上限,redis 将会师徒移除内部数据,移除规则可以通过 maxmemory-prlicy 来指定。如果 redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么 redis 则会针对那些需要申请内存的指令返回错误信息。 比如 set、lpush
Redis 持久化(RDB 和 AOF)
dir 配置文件路径下存放
Redis 主从复制
命令
<b><font color="#e65100">info replication</font></b> : 打印主从复制的相关信息
slaveof <ip> <port> : 成为某个实例的<b><font color="#ff0000">从</font></b>服务器 (临时的)
slaveof no one 不做任何一台服务器的<b><font color="#ff00ff">从</font></b>服务器
配置主从复制
<b><font color="#ff0000">slaveof <masterip> <masterport> :配置主机的 ip 和 端口号</font></b>
<b><font color="#0000ff">配置哨兵模式</font></b>
1、创建 sentinel.conf 文件,编辑 sentinel monitor mymaster 127.0.0.1 6666 1 (最后一个 1 表示几个哨兵认为主服务器宕机了才算宕机)
2、执行 redis-sentinel sentinel.conf
<b><font color="#fbc02d">从下线的主服务器的所有从服务器中挑选一个从服务器,将其转换成主服务器</font></b>。 <br>可以设置优先级按照优先级选择优先级高的,值小的优先级高 (slave-priority 100)
Redis 集群
安装ruby环境
yum install ruby<br>
yum install rubygems<br>
配置集群
1.准备6个实例
拷贝多个redis.conf文件,修改配置文件<br>
2.将6个实例全部启动
3.进入到redis的安装目录的src下 cd /opt/redis/src
4.执行 <b><font color="#ff0000">./redis-trib.rb create --replicas 1</font></b> 六个服务器ip : 端口号 (<b><font color="#0000ff">1</font></b> 表示主服务器与从服务器的个数比例, <font color="#00ff00"><b>这个设置的是1,默认前三个服务器是主服务器,后三个服务器是从服务器</b></font>)<br>
查看集群信息
1) 以集群的方式进入客户端: redis-cli -c -p 端口号<br>
2) 通过 cluster nodes 命令查看集群信息<br>
0 条评论
下一页