Redis

Redis

Remote Dictionary Server(Redis)是个由Salvatore sanfilippo 写的key-value存储系统。
Redis是一个开源的,使用ANSIC语言编写,遵守BSD协议,支持网络,可基于内存,亦可持久化的日志型 key-value 数据库。并提供多种语言的API。
它通常被称为数据结构服务器,因为value可以是字符串(String),哈希(Hash),列表(list),集合(sets)和有序集合(Sort Sets)等类型。

Redis简介

是开源免费的,基于BSD协议,是一个高性能的key-value数据库。
Redis与其他key-value缓存产品有以下三个特点

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载使用。
  2. Redis不仅仅支持简单的key-value存储,还支持Hash,List,Set,Zset等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份。

优势

  1. 性能极高,读的速度110000次/秒,写的速度81000次/秒。
  2. 丰富的数据类型,String,Hash,List,Set,OrderedSets.
  3. 原子,Redis所有操作都是原子性的,要么执行成功,要么执行失败完全不执行。单个操作是原子性的,多个操作也支持事务,即原子性通过Multi和Exec指令包起来。
  4. 丰富的特性,Redis还支持publish/subscribe,通知key过期等等特性。

Redis 的数据类型都是基于基本数据结构的,同时对程序员透明,无需进行额外的抽象。
Redis 运行在内存中,但是可以持久化到磁盘上,所以对不同数据集进行读写时需要权衡内存,因为数据量不能大于内存。相比在磁盘上相同的复杂数据结构,在内存操作起来非常简单。Redis可以做很多内部复杂性很强的事情。同时在磁盘格式方面,他们时紧凑的以追加的方式生产的,因为他们并不需要随机访问。

Redis的数据类型

  1. String (字符串) 时redis最基本的类型,一个key对应一个value。String类型是二进制安全的,意思是redis的String可以包含任何数据比如jpg图片或者序列化的对象。 String类型的值最大能存储512MB。set命令和Get命令。
  2. Hash(哈希) Redis Hash是一个键值对集合(key=>value). Redis Hash 是一个String类型的field和value的映射表,hash特别适合用于存储对象。HMSET命令和HGET命令。
  3. List(列表) redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到头部(左边)或尾部(右边)。列表最多可以存储2的32次方-1元素(4294967295 每个列表可存储40多亿元素)。lpush命令。
  4. Set(集合) Redis的Set是String类型的无序集合。集合是通过Hash表实现的,所以添加,删除,查找的复杂度都是O(1).sadd命令,sadd key member.
  5. ZSET (sorted set 有序集合) Redis Zset 和set一样也是string元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zadd命令,zadd key score member.

Redis的备份与恢复

SAVE命令用于创建当前数据库的备份。
该命令将在redis安装目录中创建dump.rdb文件。如果需要恢复数据,只需要将备份文件dump.rdb移动到redis安装目录并启动服务即可。获取redis目录可以使用Config命令。 CONFIG GET dir.
Bgsave,创建redis备份文件也可以使用BGSAVE,该命令在后台执行。

Redis安全

我们可以通过redis的配置文件设置密码参数,这样客户端连接到Redis服务就要验证密码,可以让你的Redis服务更安全。
查看是否使用了密码命令:CONFIG GET requirepass
1) “requirepass”//需要密码
2) “” //密码为空
设置密码
config set requirepass “runoob”
OK
再次查看密码 config get requirepass
1) “requirepass”
2) “runoob”//密码查出来了
使用auth验证密码 AUTH password
AUTH “runoob”
OK

Redis 性能测试

redis -benchmark [option] [option value]
$ redis -benchmark -n 10000 -q//同时执行10000个请求。
Redis性能测试工具可选参数如下

命令说明
-h指定服务器主机名
-p指定服务器端口
-s指定服务器socket
-c指定并发连接数
-n指定请求数
-d以字节的形式指定 SET/GET 值的数据大小
-k1=keep alive 0=reconnect
-rSET/GET/INCR 使用随机 key, SADD 使用随机值
-P通过管道传输 请求
-q强制退出 redis。仅显示 query/sec 值
–csv以 CSV 格式输出
-l(L)生成循环,永久执行测试
-t仅运行以逗号分隔的测试命令列表。
-I(i)Idle 模式。仅打开 N 个 idle 连接并等待。

redis -benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q
主机为127.0.0.1 ,端口号为6379,执行命令为set,lpush,请求数为10000,通过-q参数让结果只显示每秒执行的请求数。

Redis命令

redis客户端的基本语法为$redis -cli
启动redis客户端,打开终端输入命令redis -cli该命令会连接本地的redis服务。
在远程服务上执行命令,语法:
$redis -cli -h host -p port -a password
有时候会有中文乱码,加上-raw redis - cli -raw.

java使用redis

Jedis时redis推荐使用的java客户端。

<dependency>
<groupId>redis.clients<groupId>
<artifactId>jedis<artifactId>
<version>2.6.0<version>
</dependency>
Jedis jedis = new Jedis("localhost",6379);
//验证密码,如果没有设置密码这段代码可以省略
jedis.auth("password");
jedis.connect();
jedis.disconnnect();
//列出所有的key
Set<String> keys = jedis.keys("*");
//查找特定的key
Set<String> keys = jedis.key("key");
//移除给定的一个或多个key,如果key不存在,则忽略该命令
jedis.del("key1");
jedis.del("key1","key2","key3");
//设置过期时间
jedis.expire("key1",5);
//将字符串value关联到key
jedis.set("key1","value1");
//将字符串value 关联到key,并将key的生存时间设为seconds(秒)
jedis.set("key1",5,"value1")

/**
 * @author minzhao赵敏
 * @date 2020/3/14
 */
public class RedisUtil {
    //服务ip地址
    private static String ADDRESS = "127.0.0.1";
    //端口号
    private static int PORT = 6379;
    //密码
    private static String PASSWORD = "123456";
    //连接到实例的最大连接数
    private static int MAX_TOTAL = 1024;
    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值是8
    private static int MAX_IDLE = 200;
    //等待可连接的最大时间,单位毫秒,默认值-1,表示永不超时,如果超过等待时间,则直接抛出JedisConnectionException.
    private static int MAX_WAIT = 10000;
    //连接超时时间
    private static int TIMEOUT = 10000;
    //在borrow一个jedis实例时,是否提前进行validate操作,如果为true,则得到的jedis实例均是可用的。
    private static boolean TEST_ON_BORROW = true;
    //数据库模式时16个数据库0-15
    private static final int DEFAULT_DATABASE = 0;
    private static JedisPool jedisPool = null;

    /**
     * 初始化连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(MAX_TOTAL);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWaitMillis(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);
            jedisPool = new JedisPool(config, ADDRESS, PORT, TIMEOUT, PASSWORD, DEFAULT_DATABASE);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 获取Redis实例
     * @return
     */
    public synchronized static Jedis getJedis(){
        try{
            if(jedisPool!=null){
                Jedis resouce=jedisPool.getResource();
                return resouce;
            }
            else {
                return null;
            }
        }
        catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public static void close(final Jedis jedis){
        if(jedis!=null ){
            jedis.close();
        }
    }


}

redis管道技术可以提高性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值