redis安装、配置及基础
redis概述
src内无redis.conf文件,要事先复制
cp redis.conf src/
修改redis.conf内参数:
daemonize yes (以守护进程的方式运行)
启动客户端:
安装出错情况:
1.zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
解决:make MALLOC=libc
2.gcc:command not found
解决:yum install gcc*
3.warning: Clock skew detected. Your build may be incomplete.
解决:同步文件时间
参数说明:
bind 127.0.0.1 #绑定主机地址
protected-mode yes
port 6379 #redis默认监听端口6379
tcp-backlog 511
timeout 0 #当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
tcp-keepalive 300
daemonize yes #Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
supervised no
pidfile /var/run/redis_6379.pid #Redis以守护进程运行时,Redis会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
loglevel notice #指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为notice
logfile "" #日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出(stdout),则日志将会发送给/dev/null
databases 16 #设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
always-show-logo yes
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合save <seconds> <changes>
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改
stop-writes-on-bgsave-error yes
rdbcompression yes #指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbchecksum yes
dbfilename dump.rdb #指定本地数据库文件名,默认值为dump.rdb
dir ./ #指定本地数据库存放目录
slaveof <masterip> <masterport>
设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
masterauth <master-password>
当master服务设置了密码保护时,slav服务连接master的密码
requirepass foobared
设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename "appendonly.aof" 指定更新日志文件名,默认为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 no
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
activerehashing yes 指定是否**重置哈希,默认为开启
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
redis可执行文件说明:
cp redis_init_script /etc/init.d/redis
mkdir /etc/redis
mkdir -p /var/redis/6379
cp redis.conf /etc/redis/redis.conf
修改参数
数据类型简介:
1.string字符串
一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
常用:set key value/get key/APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hash 数据类型存储了包含用户脚本信息的用户对象。 Redis HMSET, HGETALL 命令,user:1 为键值。每个 hash 可以存储 232 -1 键值对(40多亿)。
hdel/hgetall/hmset/hvals/
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
llen key/lpush key value1/lrange start end/lpop/rpop
Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
语法:sadd key member
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
语法:zadd key score member
客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
默认最大连接数为10000
DEL key删除key/DUMP key 序列化key/EXISTS key 是否存在key
MOVE key db移动key到数据库/type key查看key的类型
4.Redis 服务器命令主要是用于管理 redis 服务。
HyperLogLog
做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
Redis 客户端可以订阅任意数量的频道
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:开始事务,命令入队,执行事务。
先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令,DISCARD取消事物
Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令
命令 BGSAVE,该命令在后台执行
安全:设置密码验证