redis安装、配置及基础

redis概述

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的 持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供string字符串,list列表,set集合,zset有序集合,hash哈希等数据结构的存储。
Redis支持 数据的备份,即master-slave模式的数据备份。
优点:
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis运行在内存中但是可以 持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
## 什么是原子性
我们把要么一起成功,要么一起失败的操作叫原子性操作。操作失败了,要进行回滚。
如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。

linux下 安装redis
tar zvxf redis-4.0.2.tar.gz

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.
解决:同步文件时间


4.You need tcl 8.5 or newer in order to run the Redis test
解决:
yum install tcl
5.make test 出错:
[exception]: Executing test client: NOREPLICAS Not enough good slaves to write..
NOREPLICAS Not enough good slaves to write.
解决:
vim /usr/local/redis-4.0.2/tests/integration/replication-2.tcl             将after 1000改为10000延长等待时间


redis 配置文件redis.conf
语法  CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE


参数说明:
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可执行文件说明:


启动方式:1.直接启动  2.初始化脚本启动(utils/redis_init_script)
cp redis_init_script /etc/init.d/redis
mkdir /etc/redis
mkdir -p /var/redis/6379
cp redis.conf /etc/redis/redis.conf
修改参数

 可以用/etc/init.d/redis start/stop


数据类型简介:
1.string字符串
一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
常用:set key value/get key/APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

2.Hash哈希
 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hash 数据类型存储了包含用户脚本信息的用户对象。 Redis HMSET, HGETALL 命令,user:1 为键值。每个 hash 可以存储 232 -1 键值对(40多亿)。
hdel/hgetall/hmset/hvals/


3.List列表
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
llen key/lpush key value1/lrange start end/lpop/rpop

4.Set集合
Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
语法:sadd key member


5.zset有序集合
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
 语法:zadd key score member


redis命令:
1.连接到本地的 redis 服务并执行  PING  命令,该命令用于检测 redis 服务是否启动。
2.远程连接服务:redis-cli -h host -p port -a password




Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
默认最大连接数为10000

3.一些常用对key的命令
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 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道



redis事物
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:开始事务,命令入队,执行事务。
先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令,DISCARD取消事物

redis执行脚本:
 Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

数据备份与恢复:

 SAVE命令  将在 redis 安装目录中创建dump.rdb文件。
恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令
命令 BGSAVE,该命令在后台执行


安全:设置密码验证

性能测试:
语法:redis-benchmark [option] [option value]
同时执行10000个请求

主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值