【NoSQL】redis基本介绍
redis简介redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序 redis的安装,配置等基本参数,基本用法(PHP)# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize yes # 当redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 pidfile /var/run/redis.pid # 默认情况下,redis会响应本机所有可用网卡的连接请求。当然,redis允许你通过bind配置项来指定要绑定的IP bind 192.168.1.2 10.8.4.2 # redis的默认服务端口是6379,你可以通过port配置项来修改。如果端口设置为0的话,redis便不会监听端口了,可以通过unixsocket配置项来指定unix socket文件的路径,并通过unixsocketperm来指定文件的权限:unixsocket /tmp/redis.sockunixsocketperm 755 port 6379 ## TCP 监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会一声不响的把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值,所以你要修改这两个值才能达到你的预期。 tcp-backlog 511 # 指定在一个 client 空闲多少秒之后服务端关闭连接(0 表示永不关闭) timeout 0 # TCP连接心跳检测策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。所以关闭一个连接最长需要120秒的时间。如果设置为0,则不会进行心跳检测 tcp-keepalive 300 #redis支持通过loglevel配置项设置日志等级,共分四级,即debug、verbose、notice、warning。 loglevel notice # 日志保存目录 logfile /usr/local/redis/logs/redis.log # 对于redis来说,可以设置其数据库的总数量,假如你希望一个redis包含16个数据库,这16个数据库的编号将是0到15。默认的数据库是编号为0的数据库。用户可以使用select <DBid>来选择相应的数据库 databases 16 # 主要涉及的是redis的RDB持久化相关的配置 save 900 1 # 表示每15分钟且至少有1个key改变,就触发一次持久化 save 300 10 # 表示每5分钟且至少有10个key改变,就触发一次持久化 save 60 10000 # 表示每60秒至少有10000个key改变,就触发一次持久化 #默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作, # 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, # 否则就会没人注意到灾难的发生 stop-writes-on-bgsave-error yes # 是否在 dump.rdb 数据库的时候使用 LZF 压缩字符串,压缩会占用CPU资源 rdbcompression yes # 在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验 rdbchecksum yes # 我们还可以设置快照文件的名称, dbfilename dump.rdb # 设置这个快照文件存放的路径 dir ./ # 当一个 slave 与 master 失去联系,或者复制正在进行的时候, # slave 可能会有两种表现: # # 1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时, # 或者数据可能是空的在第一次同步的时候 # # 2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时, # slave 都将返回一个 "SYNC with master in progress" 的错误, # slave-serve-stale-data yes # 你可以配置一个 slave 实体是否接受写入操作。 # 通过写入操作来存储一些短暂的数据对于一个 slave 实例来说可能是有用的, # 因为相对从 master 重新同步数而言,据数据写入到 slave 会更容易被删除。 # 但是如果客户端因为一个错误的配置写入,也可能会导致一些问题。 slave-read-only yes # Slaves 在一个预定义的时间间隔内发送 ping 命令到 server 。 # 你可以改变这个时间间隔。默认为 10 秒 repl-ping-slave-period 10 # 我们可以控制在主从同步时是否禁用TCP_NODELAY。如果开启TCP_NODELAY,那么主redis会使用更少的TCP包和更少的带宽来向从redis传输数据。但是这可能会增加一些同步的延迟,大概会达到40毫秒左右。如果你关闭了TCP_NODELAY,那么数据同步的延迟时间会降低,但是会消耗更多的带宽 repl-disable-tcp-nodelay no # 当 master 不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的 master, # 这个值越小,就越会被优先选中,但是如果是 0 , 那是意味着这个 slave 不可能被选中 slave-priority 100 # 追加模式 appendonly no # 追加模式的文件名称 appendfilename "appendonly.aof" # redis支持三种不同的模式: # no:不调用fsync()。而是让操作系统自行决定sync的时间。这种模式下,redis的性能会最快。 # always:在每次写请求后都调用fsync()。这种模式下,redis会相对较慢,但数据最安全。 # everysec:每秒钟调用一次fsync()。这是性能和安全的折衷 appendfsync everysec no-appendfsync-on-rewrite no # 我们允许redis自动重写aof。当aof增长到一定规模时,redis会隐式调用BGREWRITEAOF来重写log文件,以缩减文件体积。 # redis是这样工作的:redis会记录上次重写时的aof大小。假如redis自启动至今还没有进行过重写,那么启动时aof文件的大小会被作为基准值。 # 这个基准值会和当前的aof大小进行比较。如果当前aof大小超出所设置的增长比例,则会触发重写。另外,你还需要设置一个最小大小,是为了防止在aof很小时就触发重写 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 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 # 从服务器配置 slaveof 10.8.34.29 6379 # 当master服务设置了密码保护时,slav服务连接master的密码 masterauth redis123 # 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭 requirepass redis123 redis持久化redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式
RDB优点:
文件,并且在每个月的每一天,也备份一个 RDB 文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。
RDB缺点:
AOF优点:
AOF 的缺点:
RDB快照原理: save 900 1 # 900 秒内如果至少有 1 个 key 的值变化,则保存 save 300 10 # 300 秒内如果至少有 10 个 key 的值变化,则保存 save 60 10000 # 60 秒内如果至少有 10000 个 key 的值变化,则保存 当 Redis 需要保存 dump.rdb 文件时,服务器执行以下操作:
这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益 AOF持久化策略及原理:
推荐(并且也是默认)的措施为每秒 fsync 一次,这种 fsync 策略可以兼顾速度和安全性 以下是 AOF 重写的执行步骤:
redis集群介绍redis的存储数据结构redis使用场景1.取最新N个数据的操作
FUNCTION get_latest_comments(start,num_items): id_list = redis.lrange("latest.comments",start,start+num_items-1) IF id_list.length < num_items id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...") END RETURN id_list END 如果你还有不同的筛选维度,比如某个分类的最新N条,那么你可以再建一个按此分类的List,只存ID的话,Redis是非常高效的。 2.排行榜应用,取TOP N操作 3.需要精准设定过期时间的应用 4.计数器应用 5.Uniq操作,获取某段时间所有数据排重值 6.实时系统,反垃圾系统 7.Pub/Sub构建实时消息系统 8.构建队列系统 9.缓存 参考资料: 配置参考: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Sitecore安装程序安装失败,错误,无法打开XML文件,系统错误:
- ruby-on-rails – 如何使用Test :: Unit跳过某些测试
- c# – 访问修饰符对Main方法有用吗?
- flex组件使用【MenuBar】
- C#对asp.net的session进行简单的封装类
- sqlite学习之一 初试c调用sqlite
- XML deserialization to POJO using Jackson XmlMapper
- c# – Entity Framework 6 – 强制执行异步查询,编译时阻止
- c# – 合并LlblGenPro中实体的标准方法
- ruby-on-rails – Phusion Passenger在使用rvm升级Ruby和Ra