redis学习与实战记录

一、redis是什么?

redis是一个高性能的key-value数据库,支持string,list,set,zset,hash五种数据结构,操作是原子性的,基于内存存储,同时也支持数据持久化,在持久化数据文件存储基础上实现了master-slave同步。

二、redis能干什么?
  • 减轻关系型数据库压力
  • 验证码
  • token
  • 分布式锁
三、为什么高可用?
  • 主从复制(读写分离、备份)
  • 哨兵机制(监听,master宕机,在slave中选举出一台新master)
  • 持久化(避免停机后内存数据丢失,提供dbf和aof两种方式备份,可用于停机后再重启时的数据恢复)
四、redis怎么干?
  • 安装
    官方最新版下载地址,本次安装版本为:redis-5.0.7,安装启动步骤,打开链接,官方有安装、服务启动、服务连接命令
  • redis.conf配置文件介绍

5.0.7版本的配置文件就在编译后的根目录redis-5.0.7下,启动redis时,必须指定加载的配置文件才会生效,否则按默认配置启动。
src/redis-server /usr/local/redis-5.0.7/redis.conf

# 指定redis绑定的主机地址,0.0.0.0表示不对客户端ip做限制,任何客户端可连接
bind 0.0.0.0
#保护模式,如果未开启,客户端无法连接connect refused
protected-mode yes
# 指定访问redis服务端的端口
port 6680
tcp-backlog 511
# 指定客户端连接redis服务器时,当闲置的时间为多少(如300)时,关闭连接
timeout 0
tcp-keepalive 300
#修改为yes  后台启动:命令启动redis后,ctrl + c不会停止服务
daemonize yes
supervised no
pidfile /home/db/redis/logs/redis_6680.pid
loglevel notice
logfile /home/db/redis/logs/redis6680.log
databases 16
always-show-logo yes
#指定redis数据库多长时间内(s)有多少次(c)更新操作时就把缓存中的数据同步到本地库,比如:save 600 2,指的是10分钟内有2次更新操作,就同步到本地库
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6696.rdb
# 指定redis本地数据文件存放的目录
dir /home/db/redis/var
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
# 指定redis的访问密码
requirepass root123
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
# 指定redis是否开启日志记录功能,由于redis是利用什么save命令异步的方式更新数据到本地库,所以不开启日志记录功能,可能会导致在出现生产事故时,导致部分数据未更新到本地库
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
# 指定内存
maxmemory 4294967296
  • 常用命令
TYPE key — 用来获取某key的类型

KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,当然,复杂度O(n)

RANDOMKEY - 返回随机的一个key

RENAME oldkey newkey — key也可以改名

列表操作,精华

RPUSH key string — 将某个值加入到一个key列表末尾

LPUSH key string — 将某个值加入到一个key列表头部

LLEN key — 列表长度

LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的 分页 查询那样

LTRIM key start end — 只保留列表中某个范围的值

LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度

LSET key index value — 设置列表中某个位置的值

LPOP key

RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了

集合操作

SADD key member — 增加元素

SREM key member — 删除元素

SCARD key — 返回集合大小

SISMEMBER key member — 判断某个值是否在集合中

SINTER key1 key2 ... keyN — 获取多个集合的交集元素

SMEMBERS key — 列出集合的所有元素

还有Multiple DB的命令,可以更换db,数据可以隔离开,默认是存放在DB 0

hash操作
HDEL key field2 [field2] 
删除一个或多个哈希表字段

HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。

HGET key field 
获取存储在哈希表中指定字段的值。

HGETALL key 
获取在哈希表中指定 key 的所有字段和值

HINCRBY key field increment 
为哈希表 key 中的指定字段的整数值加上增量 increment 。

HINCRBYFLOAT key field increment 
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

HKEYS key 
获取所有哈希表中的字段

HLEN key 
获取哈希表中字段的数量

HMGET key field1 [field2] 
获取所有给定字段的值

HMSET key field1 value1 [field2 value2 ] 
同时将多个 field-value (域-值)对设置到哈希表 key 中。

HSET key field value 
将哈希表 key 中的字段 field 的值设为 value 。

HSETNX key field value 
只有在字段 field 不存在时,设置哈希表字段的值。

HVALS key 
获取哈希表中所有值

HSCAN key cursor [MATCH pattern] [COUNT count] 
迭代哈希表中的键值对。


你可能感兴趣的:(redis学习与实战记录)