redis简介
redis是一个开源(BSD许可)的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,它可以用作数据库、缓存和消息中间件,并提供多种语言的API。从2010年3月15日起,redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
1、安装redis
1.1使用yum进行安装,这里使用的是yum源,关于如何安装yum仓库请参考我的https://www.cnblogs.com/caesar-id/p/10821105.html
查看阿里源的redis版本
[root@localhost ~]# yum list redis
使用yum安装redis,安装过程非常简单
[root@localhost ~]# yum install redis -y
1.2使用源码安装redis
我们使用yum安装的redis版本是3.2.12,但是截至当前redis版本已经是redis-5.0.4。这里我们就使用最新的版本进行源码安装。
如果你已经使用yum进行了安装,现在想使用最新版本的redis,你最好卸载当前的redis。以免造成不必要的麻烦。
[root@localhost ~]# yum remove redis -y // 卸载yum安装的redis
1.2.1下载redis源码包
[root@localhost ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz
1.2.2解包
[root@localhost ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/
1.2.3安装
[root@localhost ~]# cd /opt/redis-5.0.4/ [root@localhost redis-5.0.4]# make && make install //默认在/usr/local/bin所以就不用我们设置环境变量了
安装后查看redis都有哪些可执行文件
[root@localhost ~]# ls /usr/local/bin/redis-* /usr/local/bin/redis-benchmark // 用于进行redis性能测试的工具 /usr/local/bin/redis-cli // redis的客户端 /usr/local/bin/redis-check-aof // 用于修复出问题的AOF文件 /usr/local/bin/redis-sentinel // 用于集群管理 /usr/local/bin/redis-check-rdb // 用于修复出问题的dump.rdb文件 /usr/local/bin/redis-server // redis的服务端
1.3了解redis服务的配置文件
redis-server 可以指定配置文件来启动服务,这里在redis的安装目录下有个redis.conf模板,我们查看下模板中都有哪些配置
[root@localhost ~]# cat /opt/redis-5.0.4/redis.conf | grep -v "^#" | grep -v "^$ // 过滤掉注释和空行 bind 127.0.0.1 // 绑定服务器IP地址,多个使用空格进行分隔,如果不指定bind默认监听本机所有可用的网络接口 protected-mode yes // 服务器的安全模式 port 6379 // 服务器的端口号 tcp-backlog 511 // TCP连接中已完成队列(完成三次握手之后)的长度 timeout 0 // 客户端空闲n秒后关闭连接(0表示不主动关闭连接) tcp-keepalive 300 // TCP长连接单位秒(300秒没有活动关闭连接) daemonize no // 守护进程建议使用yes启用守护进程,如果是no会阻塞shell窗口 supervised no // 可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的 pidfile /var/run/redis_6379.pid loglevel notice // 日志级别。可选项有:debug(记录大量日志信息,适用于开发、测试阶段); verbose(较多日志信息); notice(适量日志信息,使用于生产环境);warning(仅有部分重要、关键信息才会被记录)。 logfile "" // 日志文件的位置,当指定为空字符串时,为标准输出,如果redis已守护进程模式运行,那么日志将会输出到 /dev/null 。 databases 16 // 设置数据库的数目 always-show-logo yes save 900 1 // 保存数据到磁盘。格式是:save <seconds> <changes> ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes // 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, 否则就会没人注意到灾难的发生。 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。 rdbcompression yes // 是否在dump .rdb数据库的时候压缩字符串,默认设置为yes。如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大 rdbchecksum yes // 是否CRC64校验rdb文件,会有一定的性能损失(大概10%)。 dbfilename dump.rdb // dump 的reb文件名字 dir ./ // 数据库的工作目录 replica-serve-stale-data yes //#当副本失去与主服务器的连接时,或当复制仍在进行中,副本可以以两种不同的方式进行操作:1)如果副本服务过时数据设置为“是”(默认值),则副本将仍然答复客户端请求,可能包含过期数据,或者如果这是第一次同步,则数据集可能为空。 // 2)如果副本服务过时数据设置为“否”,则副本将使用对所有类型的命令执行“与正在进行的主控形状同步”错误。但是,对于信息、复制、AUTH、ping、关机、复制、角色、配置,订阅,取消订阅,psubscribe,punsubscribe,publish,pubsub,命令、发布、主机:和延迟。 replica-read-only yes // 设置slave是否是只读的。从2.6版起,slave默认是只读的 repl-diskless-sync no // 主从数据复制是否使用无硬盘复制功能。 repl-diskless-sync-delay 5 // 当启用无盘复制时,可以配置延迟。服务器等待,以便生成通过套接字传输RDB的子节点。复制品。这一点很重要,因为一旦转移开始,就不可能服务新的副本到达,将排队等待下一次RDB传输,因此服务器等待一段时间,以便让更多的副本到达。延迟以秒为单位指定,默认为5秒。禁用它完全设置为0秒,传输将尽快开始。 repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no 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
关于redis的优化,不在本文讨论范围内,下面我们手动创建一个配置文件来运行redis服务
1.4使用系统默认的配置文件登陆redis
[root@localhost ~]# redis-server
开启后你会看到如下界面,shell被redis给阻塞住了。
新开一个shell,登陆redis
1.5创建自定义的redis配置文件
[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf bind 192.168.10.10 // 绑定IP地址 protected-mode yes // 开启安全模式 port 9000 // 指定服务器端口 daemonize yes // 开启守护进程 requirepass 123.com // 登陆密码
1.5.1使用我们自定义的redis配置文件登陆redis服务器
[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf // 指定配置文件开启服务
使用客户端登陆(这里需要注意,如果是在当前shell开启的redis服务,这里就必须使用绝对路径来使用客户端。如果是新开一个shell就不会有这样的问题)
[root@localhost ~]# /usr/local/bin/redis-cli -p 9000 -h 192.168.10.10
至此redis服务的启动,和登陆就到这里吧,下面我们来看一下redis的数据结构。
2.redis的数据结构
redis是一种高级的key:value存储系统,其中value支持五种数据类型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
如果对Python有所了解相信对上面的数据类型并不会陌生。
2.1字符串string的常用命令
set // 设置key get // 获取key append // 追加string mset // 设置多个键值对 mget // 获取多个键值对 del // 删除key incr // 递增+1 decr // 递减-1
2.2list类型的常用命令
lpush // 从列表左边插 rpush // 从列表右边插 lrange // 获取一定长度的元素 lrange key start stop ltrim // 截取一定长度列表 lpop // 删除最左边一个元素 rpop // 删除最右边一个元素 lpushx/rpushx // key存在则添加值,不存在不处理
2.3set类型的常用命令
sadd // 添加元素 srem // 删除元素 sismember // 判断是否为set的一个元素 smembers // 返回集合所有的成员 sdiff // 返回一个集合和其他集合的差异 sinter // 返回几个集合的交集 sunion // 返回几个集合的并集
2.4有序集合常用命令
ZADD // 添加有序集合 ZREM // 删除有序集合中的元素 ZREVRANGE // 倒叙 ZRANGE // 正序 ZCARD // 有序集合的基数 ZSCORE // 返回成员的值 ZRANK // 返回有序集合中成员的排名
2.5哈希数据结构
hset // 设置散列值 hget // 获取散列值 hmset // 设置多对散列值 hmget // 获取多对散列值 hsetnx // 如果散列已经存在,则不设置(防止覆盖key) hkeys // 返回所有keys hvals // 返回所有values hlen // 返回散列包含域(field)的数量 hdel // 删除散列指定的域(field) hexists // 判断是否存在
2.6redis的基础命令
keys * // 查看所有key type key // 查看key类型 ttl key // 查看key过期剩余时间-1表示存在,-2表示key已经不存在了 persist // 取消key的过期时间-1表示key存在,没有过期时间 exists key // 判断key存在存在返回1否则0 del keys // 删除key可以删除多个 dbsize // 计算key的数量 expire key seconds // 过期时间
好吧redis先简单介绍到这里吧。。。。。。。。。
小结:
- redis是一种内存型的nosql数据库,因此读写性能特别快,通常用来做数据的缓存。
- redis存储数据的方法是以key-value的形式。
- redis的key通常都是字符串。
- redis的value类型支持字符串、列表、哈希、等多种类型。
- redis可以使用rdb和aof做数据的持久化存储,并且支持事物以及多实例等。
- redis由于是内存型数据库,所以存储数据的大小受机器内存的影响。