Reids:
Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行 并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据的备份,即master-slave模式的数据备份
单进程:
Redis:单进程模型来处理客户端的请求。对读写等事件的响应 是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率.
Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
数据类型:
String(字符串)
- string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
- string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
- string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M*
Hash(哈希,类似java里的Map)
- Redis hash 是一个键值对集合。
- Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 类似Java里面的Map<String,Object>
List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
- 它的底层实际是个链表
Set(集合)
- Redis的Set是string类型的无序集合。它是通过HashTable实现实现的
Zset(sorted set:有序集合)
- Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。
- redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
key的常用
DEL key:该命令用于在 key 存在时删除 key。
DUMP key:序列化给定 key ,并返回被序列化的值。
EXISTS key :检查给定 key 是否存在。
EXPIRE key seconds:为给定 key 设置过期时间,以秒计。
EXPIREAT key timestamp:EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
PEXPIRE key milliseconds:设置 key 的过期时间以毫秒计。
PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
KEYS pattern:查找所有符合给定模式( pattern)的 key 。
MOVE key db:将当前数据库的 key 移动到给定的数据库 db 当中。
PERSIST key:移除 key 的过期时间,key 将持久保持。
PTTL key:以毫秒为单位返回 key 的剩余的过期时间。
TTL key:以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
RANDOMKEY:从当前数据库中随机返回一个 key 。
RENAME key newkey:修改 key 的名称
RENAMENX key newkey:仅当 newkey 不存在时,将 key 改名为 newkey 。
SCAN cursor MATCH pattern:迭代数据库中的数据库键。
TYPE key:返回 key 所储存的值的类型。
####配置文件conf
常规:
vi redis.conf
daemonize yes #是否以后台进程运行
pidfile /var/run/redis/redis-server.pid #pid文件位置
port 6379#监听端口
bind 127.0.0.1 #绑定地址,如外网需要连接,设置0.0.0.0
timeout 300 #连接超时时间,单位秒
loglevel notice #日志级别,分别有:debug.info.warn.error
logfile /var/log/redis/redis-server.log #日志文件位置
syslog-enabled no #是否将日志输出到系统日志
databases 16#设置数据库数量,默认数据库为0
######### 快照方式
save 900 1 #在900s(15m)之后,至少有1个key发生变化,则快照
save 300 10 #在300s(5m)之后,至少有10个key发生变化,则快照
save 60 10000 #在60s(1m)之后,至少有1000个key发生变化,则快照
rdbcompression yes #dump时是否压缩数据
dir /var/lib/redis #数据库(dump.rdb)文件存放目录
######### 主从复制
slaveof #主从复制使用,用于本机redis作为slave去连接主redis
masterauth #当master设置密码认证,slave用此选项指定master认证密码
slave-serve-stale-data yes #当slave与master之间的连接断开或slave正在与master进行数据同步时,如果有slave请求,当设置为yes时,slave仍然响应请求,此时可能有问题,如果设置no时,slave会返回"SYNC with master in progress"错误信息。但INFO和SLAVEOF命令除外。
######### 安全
requirepass foobared #配置redis连接认证密码
######### 限制
maxclients 128#设置最大连接数,0为不限制
maxmemory #内存清理策略,如果达到此值,将采取以下动作:
- volatile-lru :默认策略,只对设置过期时间的key进行LRU算法删除
- allkeys-lru :删除不经常使用的key
- volatile-random :随机删除即将过期的key
- allkeys-random :随机删除一个key
- volatile-ttl :删除即将过期的key
- noeviction :不过期,写操作返回报错
- maxmemory-policy volatile-lru#如果达到maxmemory值,采用此策略
- maxmemory-samples 3 #默认随机选择3个key,从中淘汰最不经常用的
######### 附加模式
appendonly no #AOF持久化,是否记录更新操作日志,默认redis是异步(快照)把数据写入本地磁盘
appendfilename appendonly.aof #指定更新日志文件名
AOF持久化三种同步策略:
- appendfsync always #每次有数据发生变化时都会写入appendonly.aof
- appendfsync everysec #默认方式,每秒同步一次到appendonly.aof
- appendfsync no #不同步,数据不会持久化
- no-appendfsync-on-rewrite no #当AOF日志文件即将增长到指定百分比时,redis通过调用BGREWRITEAOF是否自动重写AOF日志文件。
######### 虚拟内存
vm-enabled no #是否启用虚拟内存机制,虚拟内存机将数据分页存放,把很少访问的页放到swap上,内存占用多,最好关闭虚拟内存
vm-swap-file /var/lib/redis/redis.swap #虚拟内存文件位置
vm-max-memory 0 #redis使用的最大内存上限,保护redis不会因过多使用物理内存影响性能
vm-page-size 32 #每个页面的大小为32字节
vm-pages 134217728 #设置swap文件中页面数量
vm-max-threads 4 #访问swap文件的线程数
######### 高级配置
hash-max-zipmap-entries 512 #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间
hash-max-zipmap-value 64 #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间
list-max-ziplist-entries 512 #list数据类型多少节点以下会采用去指针的紧凑存储格式
list-max-ziplist-value 64 #list数据类型节点值大小小于多少字节会采用紧凑存储格式
set-max-intset-entries 512 #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储
activerehashing yes #是否激活重置哈希