redis基础简介
一:redis简介
(1):摘要
redis由使用ANSI C编写的开源,支持网络,基于内存.亦可以持久化基于键值对的非关系型数据库,从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据显示,Redis是最流行的键值对存储数据库。
(2):软件获取帮助
官方网站:https://redis.io 官方各版本下载地址:http://download.redis.io/releases/ Redis 中文命令参考:http://redisdoc.com 中文网站1:http://redis.cn 中文网站2:http://www.redis.net.cn
(3):特点优势
1:k、v键值存储以及数据结构存储(如列表、字典)
2:所有的数据(包括存储数据)都是在内存中完成
3:单线程服务(这意味着会有较多的阻塞情况)
4:支持主从复制模式,更提供高可用主从复制模式(哨兵)
5:丰富的编程接口支持,如Python、Golang、Java、php、Ruby、Lua、Node.js
6:功能丰富,除了支持多种数据结构之外,还支持事务、发布/订阅、消息队列等功能
7:支持数据持久化(AOF、RDB)
(4)与memcahce对比
1:memcache不支持数据持久化 redis支持数据持久化
2:memcache数据存储基于LRU(最近 最少使用的会被删除) redis只要服务不停止数据可以一直保持下去
3:memcache是多线程阻塞比较小 redis是单线程阻塞比较多
4:memcache只支持简单的k、v数据存储,而redis支持多种数据格式存储。
二:redis安装配置
一:安装
# 安装
yum install gcc -y #安装C依赖 wget http://download.redis.io/redis-stable.tar.gz #下载稳定版本 tar zxvf redis-stable.tar.gz #解压 cd redis-stable make PREFIX=/opt/app/redis install #指定目录编译,也可以不用指定 make install mkdir /etc/redis #建立配置目录 cp redis.conf /etc/redis/6379.conf # 拷贝配置文件 cp utils/redis_init_script /etc/init.d/redis #拷贝init启动脚本针对6.X系统 chmod a+x /etc/init.d/redis #添加执行权限 vi /etc/redis/6379.conf #修改配置文件: bind 0.0.0.0 #监听地址 maxmemory 4294967296 #限制最大内存(4G): daemonize yes #后台运行 ####启动与停止 /etc/init.d/redis start /etc/init.d/redis stop
二:二进制文件说明
redis安装完成后会有以下可执行文件(window下是exe文件)生成,下面是各个文件的作用。 redis-server #Redis服务器和Sentinel服务器,启动时候可使用--sentinel指定为哨兵 redis-cli #Redis命令行客户端 redis-benchmark #Redis性能测试工具 redis-check-aof #AOF文件修复工具 redis-check-dump #RDB文件检测工具 redis-sentinel #Sentinel服务器,4.0版本已经做了软链接到redis-server
三:配置详解
logfile #日志文件位置及文件名称 bind 0.0.0.0 #监听地址,可以有多个 如bind 0.0.0.0 127.0.0.1 daemonize yes #yes启动守护进程运行,即后台运行,no表示不启用 pidfile /var/run/redis.pid # 当redis在后台运行的时候,Redis默认会把pid文件在在/var/run/redis.pid,也可以配置到其他地方。 # 当运行多个redis服务时,需要指定不同的pid文件和端口 port 6379 # 指定redis运行的端口,默认是6379 unixsocket #sock文件位置 unixsocketperm #sock文件权限 timeout 0 # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接, 0是关闭此设置 loglevel debug # 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose logfile "" # 日志文件配置,默认值为stdout,标准输出,若后台模式会输出到/dev/null syslog-enabled # 是否以syslog方式记录日志,yes开启no禁用,与该配置相关配置syslog-ident 和syslog-facility local0 分别是指明syslog的ident和facility databases 16 #配置可用的数据库个数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间 always-show-logo yes #4.0以后新增配置 #是否配置日志显示redis徽标,yes显示no不显示
三:redis数据类型
一:数据类型
二:全局Key命令
三:String数据类型
(1)特点:
(1):其数据结构 一个Key对应一个Value
(2):其类似是二进制安全类型 即其可以包含任何数据 例如jpg图片或者序列化对象
(3):最大存储值为512MB
(4):redis整形也当做字符串处理
(2)基本命令:
(3)使用演示
SET key value [EX seconds] [PX milliseconds] [NX|XX] #设置key为指定的字符串值。
#参数: #EX seconds – 设置键key的过期时间,单位时秒 #PX milliseconds – 设置键key的过期时间,单位时毫秒 #NX – 只有键key不存在的时候才会设置key的值 #XX – 只有键key存在的时候才会设置key的值
get 通过key取值 key不存在会返回nil
APPEND key value #如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。
GETRANGE key start end #获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始
mget 批量获取key值
mset批量设置值
STRLEN key 获取key长度
# 了解 DECR key #数字类型的key自减操作,key类型不是数字则报错 INCR key #数字类型key 自加操作,与DECR相反 DECRBY key decrement #数字类型key指定减少数值 INCRBY key increment #数字类型key指定增加数值,与DECRBY相反
四:hash数据类型
(1)特点:
(1):其Redis中的Hashes类型看成具有String Key和String Value的映射容器。
(2):所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。
(3):如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储995701749 个键值对。
(4):Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
(2)基本命令:
(3)使用演示:
Hset 设置has key 对应的field的value
Hmset 批量设置has key 对应的field的value
hkeys key 获取所有的key值
hvals key 获取所有key对应的值
五:list数据类型
(1)特点:
(1)列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
(2)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
(2)基本命令:
(3)演示命令
127.0.0.1:6379> rpush listone i love you (integer) 3 127.0.0.1:6379> lpush listone hello my java (integer) 6 127.0.0.1:6379> lrange listone 0 -1 1) "java" 2) "my" 3) "hello" 4) "i" 5) "love" 6) "you" 127.0.0.1:6379> linsert listone before love zhangsan (integer) 7 127.0.0.1:6379> lrange listone 0 -1 1) "java" 2) "my" 3) "hello" 4) "i" 5) "zhangsan" 6) "love" 7) "you" 127.0.0.1:6379> linsert listone after love lisi (integer) 8 127.0.0.1:6379> lrange listone 0 -1 1) "java" 2) "my" 3) "hello" 4) "i" 5) "zhangsan" 6) "love" 7) "lisi" 8) "you" 127.0.0.1:6379> lpop listone "java" 127.0.0.1:6379> rpop listone "you" 127.0.0.1:6379> lrange listone 0 -1 1) "my" 2) "hello" 3) "i" 4) "zhangsan" 5) "love" 6) "lisi" 127.0.0.1:6379> lrem listone 1 my (integer) 1 127.0.0.1:6379> lrange listone 0 -1 1) "hello" 2) "i" 3) "zhangsan" 4) "love" 5) "lisi"
六:Set数据类型
(1)特点:
(1)Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
(2)Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
(3)集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
(2)基本命令
集合内操作
集合间操作
(3)演示命令
集合内操作
127.0.0.1:6379> sadd setone java pyhton c c++ (integer) 4 127.0.0.1:6379> smembers setone 1) "c++" 2) "c" 3) "pyhton" 4) "java" 127.0.0.1:6379> srem setone c (integer) 1 127.0.0.1:6379> smembers setone 1) "c++" 2) "pyhton" 3) "java" 127.0.0.1:6379> scard setone (integer) 3 127.0.0.1:6379> sismember setone java (integer) 1 127.0.0.1:6379> srandmember setone 2 1) "c++" 2) "pyhton" 127.0.0.1:6379> spop setone "pyhton" 127.0.0.1:6379> smembers setone 1) "c++" 2) "java"
127.0.0.1:6379> sadd settwo 1 2 3 4 5 6 (integer) 6 127.0.0.1:6379> sadd setthree a b c 3 4 e 2 (integer) 7 127.0.0.1:6379> sdiff settwo setthree 1) "1" 2) "5" 3) "6" 127.0.0.1:6379> sinter settwo setthree 1) "2" 2) "3" 3) "4" 127.0.0.1:6379> sunion settwo setthree 1) "5" 2) "6" 3) "4" 4) "b" 5) "2" 6) "1" 7) "a" 8) "e" 9) "c" 10) "3"
七:Zset数据类型
(1)特点:
(1)Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
(2)不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
(3)有序集合的成员是唯一的,但分数(score)却可以重复。
(4)集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1
(2)基本命令:
(3)命令演示
127.0.0.1:6379> zadd zsetone 10 java (integer) 1 127.0.0.1:6379> zadd zsetone 20 pyhton (integer) 1 127.0.0.1:6379> zadd zsetone 30 c (integer) 1 127.0.0.1:6379> zadd zsetone 40 php (integer) 1 127.0.0.1:6379> zscore zsetone c "30" 127.0.0.1:6379> zcard zsetone (integer) 4 127.0.0.1:6379> zrangebyscore zsetone 10 30 1) "java" 2) "pyhton" 3) "c"