redis基础

关于redis

  Redis是一个开源的内存数据结构存储,可作用于数据库、缓存、消息队列
  redis的数据结构:字符串、列表(数组)、hashes(关联数组)、集合、有序集合、bitmaps、hyperloglogs、空间索引
  redis支持的功能:内建的复制、Lua scripting、LRU、事务、持久存储、高可用(Sentinel,Redis Cluster)
  redis是单进程,CPU并非瓶颈

redis命令

C/S
C: redis-cli
S: redis-server

一些基础命令

redis-cli命令
Usage: redis-cli [OPTIONS] [cmd [arg [arg …]]]
-h HOST
-p PORT
-a PASSWORD
-n DBID

与Connection相关命令
help @connection
AUTH password
ECHO message
PING
QUIT
ELECT dbid 切换数据库

清空数据库(* 危险,慎用 *)
FLUSHDB:Remove all keys from the current database 清空当前数据库
FLUSHALL:Remove all keys from all databases 清空所有数据库

查看redis不同数据结构的帮助命令(tab键切换)

[root@localhost ~]# redis-cli
127.0.0.1:6379> help @string

@generic:DEL EXISTS KEYS TTL MV …

@string:SET GET EXISTS INCR DECR SETNX SETEX INCRBYFLOAT MGET MSET …

@list:LPUSH RPUSH LPOP RPOP LPUSHX RPUSHX LRANGE LINDEX LSET …

@hash:HSET HMSET HGET HMGET HKEYS HVALS HDEL HGETALL …

@set:SADD SPOP SREM SRANDMEMBER SINTER SUNION …

@sorted_set:ZADD ZCARD ZCOUNT ZRANK …

string

string示例

127.0.0.1:6379> set name tom   ### set设置一个kv键
OK
127.0.0.1:6379> keys *         ### keys查看键,可用pattren
1) "name"
127.0.0.1:6379> get name       ### get查看键值
"tom"
127.0.0.1:6379> set mood haha EX 10   ### EX设定键存活时间
OK
127.0.0.1:6379> get mode
"haha"
127.0.0.1:6379> get mode
(nil)
127.0.0.1:6379> set color green
OK
127.0.0.1:6379> get color
"green"
127.0.0.1:6379> setnx color red   ### setnx也是设置一个kv键,但是它只在该键不存在时创建,set会覆盖之前的,所以setnx有效的防止了误操作
(integer) 0
127.0.0.1:6379> get color
"green"
127.0.0.1:6379> set number 0
OK
127.0.0.1:6379> incr number       ### incr对数字进行自增
(integer) 1
127.0.0.1:6379> incr number
(integer) 2
127.0.0.1:6379> incr number
(integer) 3
127.0.0.1:6379> decr number       ### decr对数字进行自减
(integer) 2
127.0.0.1:6379> decr number
(integer) 1

list

list:列表,相当于数组
将列表第一个或者最后一个值弹出叫POP,弹出第一个即可LPOP,最后一个RPOP
将一个值推入到列表的第一个位置或者最后一个位置(list原有的值依次往后往前顺延),推入第一个位置叫LPUSH,推入最后一个位置叫RPUSH
LPOP和RPUSH组合就是消息队列,LPOP和LPUSH组合就是栈
list示例

127.0.0.1:6379> LPUSH weekdays Sat Fri Thu Wed Tue Mon Sun   ### 以LPUSH命令创建一个列表(列表顺序和命令中的相反),而LPUSHX只在list存在才生效
(integer) 7
127.0.0.1:6379> LINDEX weekdays 6     ### LINDEX查看list指定位置的值
"Sat"
127.0.0.1:6379> LPOP weekdays         
"Sun"
127.0.0.1:6379> RPUSH weekdays Sun
(integer) 7
127.0.0.1:6379> LLEN Weekdays         ### 查看list值的数量
(integer) 0

hash

hash(关联数组):和list不同,它没有位置这个概念,一个数组里可以有多个字段,如student1数组里id=1,name=tom,age=14
hash示例

127.0.0.1:6379> HMSET stu1 id 1 name zhoumingrui course secretive   #### HSET也是创建hash,HMSET可创建多个field
OK
127.0.0.1:6379> HGET stu1 course    ### 查看hash中某个field的值
"secretive"
127.0.0.1:6379> HKEYS stu1         ### 查看所有的field
1) "id"
2) "name"
3) "course"
127.0.0.1:6379> HVALS stu1       ### 查看所有的field的值
1) "1"
2) "zhoumingrui"
3) "secretive"
127.0.0.1:6379> HGETALL stu1     ### 查看所有field及field的值
1) "id"
2) "1"
3) "name"
4) "zhoumingrui"
5) "course"
6) "secretive"

set

set:无序集合
set示例

127.0.0.1:6379> SADD colors1 red black yellow gray      ### SADD设置一个集合
(integer) 4
127.0.0.1:6379> SADD colors2 red black pink purple
(integer) 4
127.0.0.1:6379> SINTER colors1 colors2       ### SINTER求两个集合的交集
1) "black"
2) "red"
127.0.0.1:6379> SUNION colors1 colors2       ### SUNION求两个集合的并集
1) "yellow"
2) "black"
3) "purple"
4) "red"
5) "gray"
6) "pink"
127.0.0.1:6379> SDIFF colors1 colors2        ### SDIFF求两个集合的差集,第一个有而第二个没有的,这里是“colors1有,而colors2没有”的意思
1) "gray"
2) "yellow"
127.0.0.1:6379> SDIFF colors2 colors1
1) "pink"
2) "purple"
127.0.0.1:6379> SISMEMBER colors1 blue     ### SISMEMBER判断集合中是否存在指定的值,0为不存在,1为存在
(integer) 0
127.0.0.1:6379> SISMEMBER colors1 red
(integer) 1

setsort

setsort:有序集合
setsort示例

127.0.0.1:6379> ZADD taluohui 100 yuzhe 99 shijie 90 zhengyi 88 zhengwei   ### ZADD创建setsort,以分数/元素的形式
(integer) 4
127.0.0.1:6379> ZSCORE taluohui shijie    ### ZSOCRE查看集合某个元素的分数
"99"
127.0.0.1:6379> ZCOUNT taluohui 99 100    ### ZCOUNT查看在某个分数间有几个元素
(integer) 2
127.0.0.1:6379> ZRANK taluohui shijie     ### ZRANK查看某个元素的排名(按分数从低到高)
(integer) 2

Publish Subscribe

publish:发布 subscribe:订阅
publish & subscribe示例

开启两个ssh连接,一个订阅一个发布
127.0.0.1:6379> SUBSCRIBE news               ### SUBSCRIBE订阅一个频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
127.0.0.1:6379> PUBLISH news haha           ### PUBLISH发布一个消息给指定频道
(integer) 1

[root@localhost ~]# redis-cli
127.0.0.1:6379> SUBSCRIBE news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "message"
2) "news"
3) "haha"                                   ### 另一个ssh连接收到了haha消息

reis程序环境

  配置文件:/etc/redis.conf
  主程序:/usr/bin/redis-server
           6379/tcp
  客户端:/usr/bin/redis-cli
  Unit File:/usr/lib/systemd/system/redis.service
  数据目录:/var/lib/redis

redis配置文件redis.conf的内容结构

[root@localhost ~]# grep "^###" /etc/redis.conf
################################## INCLUDES ###################################
################################## NETWORK #####################################
################################# GENERAL #####################################
################################ SNAPSHOTTING  ################################
################################# REPLICATION #################################
################################## SECURITY ###################################
################################### LIMITS ####################################
############################## APPEND ONLY MODE ###############################
################################ LUA SCRIPTING  ###############################
################################ REDIS CLUSTER  ###############################
################################## SLOW LOG ###################################
################################ LATENCY MONITOR ##############################
############################# EVENT NOTIFICATION ##############################
############################### ADVANCED CONFIG ###############################

GENERAL配置项

daemonize, supervised, loglevel, pidfile, logfile
databases:设定数据库数量,默认为16个(设为-1意味着不限制数量),每个数据库的名字均为整数,从0开始编号,默认操作的数据库为0

NETWORK配置

bind IP
port PORT
protected-mode
tcp-backlog
unixsocket
timeout 连接的空闲超时时长

SECURITY配置:

requirepass
rename-command <NEW_CMND_NAME> 在AOF或Replication环境中,不推荐使用;

Limits配置

maxclients
maxmemory
maxmemory-policy noeviction(redis作为数据库使用或缓存使用情况不同)
淘汰策略:volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl, noeviction
maxmemory-samples 5 淘汰算法运行时的采样样本数

OOM: Out Of Memory, 内核将自动杀死最“吃”内存资源的进程
oom_score:以分数来表示占用内存资源的程度,所以内核会杀死得分最高的
oom_adj: 跟oom_score相关,该值越高,oom_score会越高,提高某些不太重要进程的oom_adj,来防止那些占用内存高但是重要的进程被杀死

SlowLog配置

slowlog-log-slower-than 10000(单位是微秒)
slowlog-max-len 128 SlowLog记录的日志最大条目

ADVANCED配置

数据结构的安全限制,默认即可,这里以数据结构hash的安全限制为例
hash-max-ziplist-entries 512 设置ziplist的键数量最大值
hash-max-ziplist-value 64 每个值的最大空间

client-output-buffer-limit normal 0 0 0 (hard-limit soft-limit soft-limit seconds)
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

redis的持久化

RDB:snapshotting, 二进制格式;按事先定制的策略,周期性地将数据从内存同步至磁盘;数据文件默认为dump.rdb
客户端显式使用SAVE或BGSAVE命令来手动启动快照保存机制
SAVE:同步,即在主线程中保存快照,此时会阻塞所有客户端请求
BGSAVE:异步;backgroud

AOF:Append Only File, fsync
记录每次写操作至指定的文件尾部实现的持久化;当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库
客户端使用BGREWRITEAOF手动完成AOF文件重写(这个时重写,跟备份无关)
BGREWRITEAOF:AOF文件重写,不会读取正在使用AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件

相比于RDB,AOF的缺点:产生大量IO,影响性能
         优点:发生崩溃等问题时,恢复的数据基本完整

SNAPSHOTTING(RDB)配置

save seconds changes
save 900 1
save 300 10
save 60 10000
表示:三个策略满足其中任意一个均会触发SNAPSHOTTING操作;60s内达到1W个key发生变化立即执行快照;如果60s内没有,300s内达到10个key有变化那么也会执行快照;900s内有一个key有变化执行快照;(要是900s内一个也没有呢?都没有估计问题不大)

stop-writes-on-bgsave-error yes 快照操作出现错误时,是否禁止新的写入操作请求
stop
rdbcompression yes 压缩
rdbchecksum yes 检查数据完整性

dbfilename dump.rdb 指定rdb文件名
dir /var/lib/redis rdb文件的存储路径

APPEND ONLY MODE(AOF)相关的配置

appendonly no 是否开启AOF
appendfilename “appendonly.aof” 指定aof文件名

appendfsync(三种模式)
no:redis不执行主动同步操作,而是内核判定
everysec:每秒一次
always:每语句一次

no-appendfsync-on-rewrite no 是否在后台执行aof重写期间不调用fsync,默认为no,表示调用

以下两个条件同时满足时,方会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes 恢复数据时,发现最后一条命令不完整是否删除,理应删除

** 注意:持久机制本身不能取代备份;应该制订备份策略,对redis库定期备份 **

RDB与AOF同时启用

(1) BGSAVE和BGREWRITEAOF不会同时进行
(2) Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值