• Redis学习


    Redis学习

    下载与安装

    点击这里跳转到windows版下载地址
    官方网站请点击

    文件介绍

    redis-server

    Redis服务器的daemon启动程序

    redis-cli

    Redis命令行操作工具

    redis-benchmark

    Redis性能测试工具

    redis-check-aof

    更新日志检查

    启动Redis

    redis-server redis.windows.conf
    

    Redis服务相关操作

    设为服务后可开机启动,不用每次都手动启动Redis

    设为服务

    cmd窗口已关闭redis就会关闭,所以需要我们将其设为服务才会后台运行

    redis-server --service-install redis.windows-service.conf --loglevel verbose
    

    卸载服务

    redis-server --service-uninstall
    

    开启服务

    redis-server --service-start
    

    停止服务

    redis-server --service-stop
    

    测试

    redis-cli.exe -h 127.0.0.1 -p 6379
    

    存入数据

    set userinfo zhangsan
    

    读取数据

    get userinfo
    

    如果有获取到zhangsan这条数据,那么就说嘛安装环节完成

    配置

    查看配置

    config get *
    

    编辑配置

    config set xxx yyy
    

    配置说明

    
    #绑定主机地址
    bind 127.0.0.1
    
    #是否作为守护进程运行
    protected-mode yes
    
    #Redis默认监听端口
    port 6379
    
    tcp-backlog 511
    
    #当客户端闲置多长时间后关闭连接.如果为0,则表示关闭此功能
    timeout 0
    
    #
    tcp-keepalive 0
    
    #日志级别。Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
    loglevel notice
    
    #日志文件
    logfile "server_log.txt"
    
    #
    syslog-enabled yes
    
    #
    syslog-ident redis
    
    #设置数据库的数量,默认数据库为0.可以使用SELECT <dbid>命令在连接上指定数据库id
    databases 16
    
    #指定在多长时间内,有多少次更新操作,就将数据同步到数据文件。可以多个条件配合
    此处表示当有一条keys数据被改变时,900秒刷新到disk一次
    save 900 1
    
    ##
    stop-writes-on-bgsave-error yes
    
    #指定存储至本地数据库时是否压缩数据,默认为yes<br />Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
    rdbcompression yes
    
    rdbchecksum yes
    
    #指定本地数据库文件名,默认值为dump.rdb
    dbfilename dump.rdb
    
    #指定本地数据库存放目录
    dir ./
    
    slave-serve-stale-data yes
    
    slave-read-only yes
    
    repl-diskless-sync no
    
    repl-diskless-sync-delay 5
    
    repl-disable-tcp-nodelay no
    
    slave-priority 100
    
    #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
    appendonly no
    
    #指定更新日志文件名,默认为appendonly.aof
    appendfilename "appendonly.aof"
    
    #指定更新日志条件,共有3个可选值: 
    #no:表示等操作系统进行数据缓存同步到磁盘(快) 
    #always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
    #everysec:表示每秒同步一次(折衷,默认值)
    appendfsync everysec
    
    no-appendfsync-on-rewrite no
    
    auto-aof-rewrite-percentage 100
    
    auto-aof-rewrite-min-size 64mb
    
    aof-load-truncated 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
    
    #指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
    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
    
    

    Redis日志

    查看日志级别

    config get loglevel
    

    数据类型

    Redis支持5中数据类型

    字符串(string)

    说明

    Redis中的字符串是一个字节序列,是二进制安全的,所以不会由任何特殊字符而终止,一次,Redis中的字符串可以存储高达512M的内容

    相关命令
    赋值
    set var value
    
    取值
    get var 
    
    

    散列/哈希(hash)

    说明

    Redis中的散列/哈希是键值对的集合

    Redis散列/哈希是字符串字段和字符串值之间的映射
    因此,它们用于表示对象

    每个散列/哈希可以存储多达2^32 - 1个健-值对(超过40亿个)

    命令
    赋值单个field
    hset key field value
    
    同时赋值多个field
    hmset key field value [field value...]
    
    取单个field
    hget key field
    
    取多个field值
    hmget key field [field...]
    
    hincrby key field integer
    
    检测field是否存在
    hexists key field
    
    删除指定field
    hdel keys field
    
    获取key的field数量
    hlen key
    
    获取key的所有field
    hkeys key
    
    获取key的所有field值
    hvals key
    
    返回key的所有field和值
    hgetall
    

    列表(list)

    Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素。

    列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。

    命令
    赋值
    lpush key value
    
    取值语法,获取列表指定范围内的数据
    lrange key start end
    

    集合(set)

    说明

    字符串无序集合,不可重复,唯一性

    一个集合中的最大成员数量为2^32 - 1(即4294967295,每个集合中元素数量可达40亿个)个。

    命令
    赋值
    sadd key value
    
    取值语法,获取集合内容列表
    smembers key
    

    可排序集合(zset)

    说明

    类似于集合,内容不可重复,但是有一个可重复的分数值,用来排序

    命令
    赋值
    zadd key score value
    
    取值语法(获取元素)
    zrange key start end
    
    取值语法(获取索引值)
    key 变量
    start 开始索引
    end 结束索引
    withscores 可选,递增
    zrangebyscore key start end [withscores]
    
    返回成员的排名
    zrevrank
    
    删除指定score的元素
    zremrangebyscore
    
    删除指定排名区间的元素
    zremrangebyrank
    

    Redis事务(不完整有待补充)

    输入multi命令后返回OK表示已经开始事务数据

    每次键入一条指令后并不会立即执行指令,而是会返回QUEUED表示已加入事务队列

    使用exec命令后结束事务语句并执行事务队列中的所有指令

    Redis命令

    Redis命令不区分大小写

    检查Redis服务器是否正在运行
    ping
    
    链接Redis服务器
    redis-cli -h host -p port -a password
    
    返回变量是否存在
    existst key
    
    此命令返回存储在指定键的值的序列化版本
    DUMP key
    
    返回变量数据类型
    type key 
    
    更改键的名称,如果newkey存在,则覆盖,成功返回ok
    rename key newkey
    
    更改键的名称,如果newkey存在,则表示失败,返回0;操作成功返回1
    renamenx key newkey
    
    获取键到期的剩余时间(单位为毫秒)
    pttl key
    
    获取一个随机的键
    randomkey
    
    删除指定键的过期时间,使其永久
    persist key
    
    将键移动到另一个数据库
    move key db
    
    查找与指定模式匹配的所有键(例如keys *)
    keys pattern
    
    设置键的到期时间(以毫秒为单位)
    pexpire key milliseconds
    
    以Unix时间戳形式来设置键的到期时间(以毫秒为单位) 
    pexpireat key milliseconds-timestamp
    
    设置键在指定时间秒数之后到期/过期
    expire key seconds
    
    设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式
    expireat key timestamp
    
    获取记录条数
    dbsize
    
    退出链接
    quit
    
    服务器基本信息
    info
    
    实时转存收到的请求
    monitor
    
    清空当前数据库
    flushdb
    
    清空所有数据库
    flushall
    
    删除key
    del key [key ...]
    

    JavaRedis

    pom文件

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

    如果不是使用maven管理包则需要一个依赖包commons-pool2

    连接测试

    public void redisTest() {
    	// 连接本地的 Redis 服务
    	Jedis jedis = new Jedis("localhost");
    	System.out.println("连接本地的 Redis 服务成功!");
    	// 查看服务是否运行
    	System.out.println("服务 正在运行: " + jedis.ping());
    	//关闭Jedis连接
    	jedis.close();
    }
    

    存取Javabean

    存取Javabean需要将Javabean序列化或者Json化,亦或者将对象与xml互转(未测试)

    相关代码
    测试Javabean
    package demo;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
    
    	private static final long serialVersionUID = -5574967491708064809L;
    
    	public User() {
    		super();
    	}
    
    	public User(int id, String userName, String address) {
    		super();
    		this.id = id;
    		this.userName = userName;
    		this.address = address;
    	}
    
    	private int id;
    	private String userName;
    	private String address;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getUserName() {
    		return userName;
    	}
    
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    
    	public String getAddress() {
    		return address;
    	}
    
    	public void setAddress(String address) {
    		this.address = address;
    	}
    
    }
    
    测试代码-序列化
    // 实例化Redis
    Jedis jedis = new Jedis();
    // 存储
    User user = new User(10000, "马化腾", "深圳市");
    User user2 = new User(10001, "马云", "杭州市");
    jedis.set("user1".getBytes(), SerializeUtil.serialize(user));
    jedis.set("user2".getBytes(), SerializeUtil.serialize(user2));
    // 读取
    User usera = (User) SerializeUtil.unserialize(jedis.get("user1".getBytes()));
    System.out.println(usera.getUserName());
    // 关闭Redis
    jedis.close();
    
    测试代码-json化

    适合字段少、数据少的情况,因为json化会消耗大量资源

    pom

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.31</version>
    </dependency>
    

    demo

    // 实例化Redis
    Jedis jedis = new Jedis();
    // 存储
    User user = new User(10000, "马化腾", "深圳市");
    User user2 = new User(10001, "马云", "杭州市");
    jedis.lpush("user", JSON.toJSON(user).toString());
    jedis.lpush("user", JSON.toJSON(user2).toString());
    //读取
    List<String> strs = jedis.lrange("user", 0, 10);
    for (String string : strs) {
    	JSON json = JSON.parseObject(string);
    	User demoUser = JSON.toJavaObject(json, User.class);
    	System.out.println(demoUser.getUserName());
    }
    // 关闭Redis
    jedis.close();
    
  • 相关阅读:
    查询避免Unknown column ‘xxx’ in ‘where clause’
    SSM框架——Spring+SpringMVC+Mybatis的搭建
    虚拟机VMware12安装Windows7教程
    IntelliJ IDEA 安装破解详解
    Jar包进行反编译,修改后重新打包
    Thinking in Java 4th(Java编程思想第四版)文档、源码、习题答案
    面向对象编程思想概览(六)异常处理
    面向对象编程思想概览(五)线程的同步
    面向对象编程思想概览(四)多线程
    DL四(预处理:主成分分析与白化 Preprocessing PCA and Whitening )
  • 原文地址:https://www.cnblogs.com/vmask/p/6681590.html
Copyright © 2020-2023  润新知