• 【Redis】redis的安装、配置执行及Jedisclient的开发使用


    定义:

    Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets,sorted sets, bitmaps and hyperloglogs.

    下载:

    http://redis.io/download

    安装

    tar -zxvf解压完make、make install一下




    配置

    redis.conf

    #是否以后台进程执行
    daemonize yes
     
    #指定后台进程的pid文件写入位置
    pidfile /var/run/redis.pid
     
    #监听端口,默觉得6379
    port 6379
     
    #仅仅接受下面绑定的IP请求,没有表示接受全部请求
    bind 127.0.0.1
     
    设置unix套接字,默觉得空,及不通过unix套接字来监听
    # unixsocket /tmp/redis.sock
    # unixsocketperm 755
     
    #client空暇多长时间,关闭链接。

    0表示不关闭。单位秒

    timeout 5
     
    # TCP keepalive.
    # 假设是非零值。当失去链接时。会使用SO_KEEPALIVE发送TCP ACKs 到client。
    # 这个參数有两个作用:
    # 1.检測断点。
    # 2.从网络中间设备来看,就是保持链接
    # 在Linux上,设定的时间就是发送ACKs的周期。
    # 注意:达到双倍的设定时间才会关闭链接。在其它内核上,周期依赖于内核设置。

    # 一个比較合理的值为60s
    tcp-keepalive 0
     
    # 指定日志级别,下面记录信息依次递减
    # debug用于开发/測试
    # verbose没debug那么具体
    # notice适用于生产线# warning仅仅记录很重要的信息
    loglevel notice
     
    #日志文件名,假设为stdout则输出到标准输出端,假设是以后台进程执行则不产生日志
    logfile /data/logs/redis/redis.log
     
    # 要想启用系统日志记录器,设置一下选项为yes
    # syslog-enabled no
     
    # 指明syslog身份
    # syslog-ident redis
     
    # 指明syslog设备。必须是一个用户或者是local0 ~ local7之中的一个
    # syslog-facility local0
     
    #设置数据库数目。第一个数据库编号为:0
    databases 16
     
    ##############快照#################
     
    #在什么条件下保存数据库到磁盘,条件能够有非常多个,满足不论什么一个条件都会进行快照
    #在900秒之内有一次key的变化
    save 900 1
    #在300秒之内,有10个key的变化
    save 300 10
    #在60秒之内有10000个key变化
    save 60 10000
     
    #当持久化失败的时候,是否继续提供服务
    stop-writes-on-bgsave-error yes
     
    #当写入磁盘时。是否使用LZF算法压缩数据,默觉得yes
    rdbcompression yes
     
    #是否加入CRC64校验到每一个文件末尾--花费时间保证安全
    rdbchecksum yes
     
    #磁盘上数据库的保存名称
    dbfilename dump.rdb
     
    # Redis工作文件夹。以上数据库保存文件和AOF日志都会写入此文件夹
    dir /data/redis
     
    ##############同步#################
     
    #主从复制。当本机是slave时配置
    # slaveof <masterip> <masterport>
     
    #当主机须要password验证时候配置
    # masterauth <master-password>
     
    # 当slave和master丢失链接,或正处于同步过程中。是否响应client请求
    # 设置为yes表示响应
    # 设置为no,直接返回"SYNC with master in progress"(正在和主server同步中)
    slave-serve-stale-data yes
     
    # 设置slave是否为仅仅读。
    # 注意:即使slave设置为仅仅读,也不能令其暴露在不受信任的网络环境中
    slave-read-only yes
     
    # 设置slave给master发送ping的时间间隔。秒
    # repl-ping-slave-period 10
     
    # 设置传输数据I/O,主机数据、ping响应超时时间,默认60s
    # 这个时间一定要比repl-ping-slave-period大,否则会不断检測到超时
    # repl-timeout 60
     
    # 是否在SYNC后slave socket上禁用TCP_NODELAY?
    # 假设你设置为yes。Redis会使用少量TCP报文和少量带宽发送数据给slave。
    # 可是这样会在slave端出现延迟。

    假设使用Linux内核的默认设置。大概40毫秒。

    # 假设你设置为no,那么在slave端延迟就会降低可是同步带宽要添加。
    # 默认我们是为低延迟优化的。
    # 可是假设流量特别大或者主从server相距比較远。设置为yes比較合理。

    repl-disable-tcp-nodelay no
     
    # 设置slave优先级。默觉得100
    # 当主server不能正确工作的时候,数字低的首先被提升为主server,可是0是禁用选择
    slave-priority 100
     
    ##############安全#################
     
    # 设置client连接password,由于Redis响应速度能够达到每秒100w次,所以password要特别复杂
    # requirepass foobared
     
    # 命令又一次命名。或者禁用。

    # 重命名命令为空字符串能够禁用一些危急命令比方:FLUSHALL删除全部数据
    # 须要注意的是,写入AOF文件或传送给slave的命令别名或许会引起一些问题
    # rename-command CONFIG ""
     
    ##############限制#################
     
    # 设置最多链接client数量。默觉得10000。

    # 实际能够接受的请求数目为设置值减去32,这32是Redis为内部文件描写叙述符保留的
    # maxclients 10000
     
    # 设置最大使用内存数量。在把Redis当作LRU缓存时特别实用。

    # 设置的值要比系统能使用的值要小
    # 由于当启用删除算法时。slave输出缓存也要占用内存
    # maxmemory <bytes>
     
    #达到最大内存限制时,使用何种删除算法
    # volatile-lru  使用LRU算法移除带有过期标致的key
    # allkeys-lru -> 使用LRU算法移除不论什么key
    # volatile-random -> 随机移除一个带有过期标致的key
    # allkeys-random ->  随机移除一个key
    # volatile-ttl -> 移除近期要过期的key
    # noeviction -> 不删除key。当有写请求时,返回错误
    #默认设置为volatile-lru
    # maxmemory-policy volatile-lru
     
    # LRU和最小TTL算法没有精确的实现
    # 为了节省内存仅仅在一个样本范围内选择一个近期最少使用的key,能够设置这个样本大小
    # maxmemory-samples 3
     
    ##############AO模式#################
     
    # AOF和RDB持久化能够同一时候启用
    # Redis启动时候会读取AOF文件,AOF文件有更好的持久化保证
    appendonly no
     
    # AOF的保存名称,默觉得appendonly.aof
    # appendfilename appendonly.aof
     
    # 设置何时写入追加日志,又三种模式
    # no:表示由操作系统决定何时写入。

    性能最好。但可靠性最低

    # everysec:表示每秒运行一次写入。折中方案,推荐
    # always:表示每次都写入磁盘。

    性能最差,比上面的安全一些

    appendfsync everysec
     
    # 当AOF同步策略设定为alway或everysec
    # 当后台存储进程(后台存储或者AOF日志后台写入)会产生非常多磁盘开销
    # 某些Linux配置会使Redis由于fsync()调用产生堵塞非常久
    # 如今还没有修复补丁,甚至使用不同线程进行fsync都会堵塞我们的同步write(2)调用。

    # 为了缓解这个问题,使用下面选项在一个BGSAVE或BGREWRITEAOF执行的时候
    # 能够阻止fsync()在主程序中被调用,
    no-appendfsync-on-rewrite no
     
    # AOF自己主动重写(合并命令,降低日志大小)
    # 当AOF日志大小添加到一个特定比率,Redis调用BGREWRITEAOF自己主动重写日志文件
    # 原理:Redis 会记录上次重写后AOF文件的文件大小。
    # 假设刚启动,则记录启动时AOF大小
    # 这个基本大小会用来和当前大小比較。假设当前大小比特定比率大。就会触发重写。
    # 你也须要指定一个AOF须要被重写的最小值,这样会避免达到了比率。
    # 可是AOF文件还非常小的情况下重写AOF文件。

    # 设置为0禁用自己主动重写
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
     
    ##############LUA脚本#################
    # Lua脚本的最大运行时间,单位毫秒
    # 超时后会报错。而且计入日志
    # 当一个脚本执行时间超过了最大执行时间
    # 仅仅有SCRIPT KILL和 SHUTDOWN NOSAVE两个命令能够使用。
    # SCRIPT KILL用于停止没有调用写命令的脚本。
    # SHUTDOWN NOSAVE是唯一的一个,在脚本的写命令正在运行
    # 用户又不想等待脚本的正常结束的情况下。关闭server的方法。

    # 下面选项设置为0或负数就会取消脚本运行时间限制
    lua-time-limit 5000
     
    ##############慢查询#################
     
    # Redis慢查询日志记录超过设定时间的查询,且仅仅记录运行命令的时间
    # 不记录I/O操作,比方:和client交互。发送回复等。
    # 时间单位为微妙,1000000微妙 = 1 秒
    # 设置为负数会禁用慢查询日志,设置为0会记录全部查询命令
    slowlog-log-slower-than 10000
     
    # 日志长度没有限制,可是会消耗内存。超过日志长度后,最旧的记录会被移除
    # 使用SLOWLOG RESET命令能够回收内存
    slowlog-max-len 128
     
    ##############高级设置###############
     
    # 当有少量条目的时候,哈希使用高效内存数据结构。

    最大的条目也不能超过设定的阈值。# “少量”定义例如以下:

    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
     
    # 和哈希编码一样,少量列表也以特殊方式编码节省内存。

    “少量”设定例如以下:

    list-max-ziplist-entries 512
    list-max-ziplist-value 64
     
    # 集合仅仅在下面情况下使用特殊编码来节省内存
    # -->集合所有由64位带符号10进制整数构成的字符串组成
    # 以下的选项设置这个特殊集合的大小。
    set-max-intset-entries 512
     
    # 当有序集合的长度和元素设定为下面数字时。又特殊编码节省内存
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
     
    # 哈希刷新使用每100个CPU毫秒中的1毫秒来帮助刷新主哈希表(顶级键值映射表)。

    #  Redis哈希表使用延迟刷新机制。越多操作。越多刷新。

    # 假设server空暇,刷新操作就不会进行,很多其它内存会被哈希表占用
    # 默认每秒进行10次主字典刷新,释放内存。
    # 假设你有硬性延迟需求,偶尔2毫秒的延迟无法忍受的话。设置为no
    # 否则设置为yes
    activerehashing yes
     
    # client输出缓存限制强迫断开读取速度比較慢的client
    # 有三种类型的限制
    # normal -> 正茶馆你client
    # slave  -> slave和 MONITOR
    # pubsub -> client至少订阅了一个频道或者模式
    # client输出缓存限制语法例如以下(时间单位:秒)
    # client-output-buffer-limit <类别> <强制限制> <软性限制> <软性时间>
    # 达到强制限制缓存大小,立马断开链接。
    # 达到软性限制,仍然会有软性时间大小的链接时间
    # 默认正常client无限制,仅仅有请求后,异步client数据请求速度快于它能读取数据的速度
    # 订阅模式和主从client又默认限制。由于它们都接受推送。
    # 强制限制和软性限制都能够设置为0来禁用这个特性
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
     
    # 设置Redis后台任务运行频率,比方清除过期键任务。
    # 设置范围为1到500。默觉得10.越大CPU消耗越大,延迟越小。
    # 建议不要超过100
    hz 10
     
    # 当子进程重写AOF文件,下面选项开启时。AOF文件会每产生32M数据同步一次。
    # 这有助于更快写入文件到磁盘避免延迟
    aof-rewrite-incremental-fsync yes
     
    ##############包括#################
     
    #引入标准模板
    # include /path/to/other.conf
    主从集群,加入例如以下配置

    slaveof 192.168.11.176 10001

    启动/停止

    启动
    redis-server xxxxxx/redis.conf
    停止
    redis-cli -n 12002 shutdown

    Redis持久化

    Redis的持久化方式:快照和AOF(append-only file)
    快照
    默认的持久化方式。将内存数据以快照方式写入文件dump.rdb,无法保证数据完整性(持久化之前出现宕机。RDB採用fork子进程完毕持久化,当数据集较大,可能会导致整个server停止服务几百毫秒)
    AOF
    每个收到的写命令都通过write函数追加到文件里appendonly.aof,当redis重新启动会又一次运行文件里保存的写命令重建数据库的内容。因为os会在内核缓存write所的改动。所以不可能马上写入磁盘。这就有可能导致数据丢失。通过强制写入来保证:
    appendonly yes  启用aof持久化方式
    appendfsync always每次收写命令马上强制写磁盘,最慢可是保证数据持久化,不推荐
    appendfsync everysec 每秒写
    appendfsync no依赖os。性能好。持久化没保证
    aof文件比rdb大。效率慢

    Jedisclient开发

    <dependency>
    			<groupId>redis.clients</groupId>
    			<artifactId>jedis</artifactId>
    			<version>2.6.0</version>
    		</dependency>

    package com.chiwei.redis;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class RedisClient {
    
    	private static JedisPool pool = null;
    	private static String host = "192.168.11.176";
    	private static int port = 10001;
    
    	static {
    		if (pool == null) {
    			JedisPoolConfig config = new JedisPoolConfig();
    			config.setMaxTotal(500);
    			config.setMaxIdle(5);
    			config.setMaxWaitMillis(1000);
    			config.setTestOnBorrow(true);
    			config.setTestOnReturn(true);
    			config.setTestWhileIdle(true);
    			pool = new JedisPool(config, host, port);
    		}
    	}
    
    	public static void returnResource(JedisPool pool, Jedis redis) {
    		if (redis != null) {
    			pool.returnResource(redis);
    		}
    	}
    
    	public static String get(String key) {
    		String value = null;
    		Jedis jedis = null;
    		try {
    			jedis = pool.getResource();
    			value = jedis.get(key);
    		} catch (Exception e) {
    			e.printStackTrace();
    			// 释放资源
    			pool.returnBrokenResource(jedis);
    		} finally {
    			returnResource(pool, jedis);
    		}
    		return value;
    	}
    
    	public static void set(String key, String value) {
    		Jedis jedis = null;
    		try {
    			jedis = pool.getResource();
    			jedis.set(key, value);
    			jedis.expire(key, 10);
    		} catch (Exception e) {
    			e.printStackTrace();
    			pool.returnBrokenResource(jedis);
    		} finally {
    			returnResource(pool, jedis);
    		}
    	}
    
    	public static void main(String[] args) {
    		set("momo", "nono");
    	}
    
    }
    



    欢迎留言探讨!!

  • 相关阅读:
    linux各文件夹的作用
    CodeIgniter的URL传过来的中文参数处理错误的修复
    syn_ack攻击
    分治排序
    Linux Shell学习笔记
    sql题型
    jquery ajax
    json 字符串与对象之间的转换
    常用的VIM命令列表 移动光标
    visual c++ 2012 内存泄漏检测方法
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8337359.html
Copyright © 2020-2023  润新知