Redis

NOSql

  • 概念:指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称
  • 常见的NOSql数据库:
    1. 键值数据库:可以理解为一个HashMap,支持SET/GET操作
      • 可以是:string,list,set,hash
    2. 列式数据库:每行列数可变的数据库
    3. 文档数据库键值对形式存储
      • 文档格式可以是:XML,YAML,JSON,BSON,二进制文件
    4. 图形数据库以图为数据模型来存储数据,图来表示对象的集合以及关系

Redis

简介

  • Redis属于键值数据库
  • 它支持存储的类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集,而且这些操作都是原子性的
  • redis支持各种不同方式的排序,数据都是缓存在内存
  • redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

特点

  1. 高性能,持久存储,适应高并发的应用场景
  2. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型
  3. Redis数据库完全在内存中,使用磁盘仅用于持久性
  4. Redis可以将数据复制到任意数量的从服务器
  5. Redis操作是原子性的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值
  6. Redis是单线程

安装

  • Windows安装
    1. 下载安装包:**Redis下载**
    2. 解压即可使用
  • Linux安装:**Redis官网**
  • 配置文件解析
    redis配置.png

核心文件配置

核心文件配置.png

服务启动

  1. 启动redis服务器服务
    • 在cmd中输入:redis-server.exe redis-windows.conf
  2. 启动redis客户端服务
    • 在cmd中输入:redis-cli.exe -h ip地址 -p 端口 -a 密码

使用命令

string

介绍 命令
新增或修改key的值 set key value [px 毫秒数] [ex 秒数] [nx]
获取key的值 get key
为key设置一个新的值,并且返回旧的值 getset key value
将已存在的key中的value进行+1(value必须为数值型) incr key
将已存在的key中的value进行-1(value必须为数值型) decr key
将已存在的key中的value进行加上指定值(value必须为数值型) incrby key increment(需要增加的值)
将已存在的key中的value进行减去指定值(value必须为数值型) decrby key increment(需要减少的值)

list

介绍 命令
将一个或多个值插入到列表头部 lpush key value1 value2…
移除并获取列表的第一个元素 lpop key
获取列表长度 llen key
通过索引获取列表中的元素 lindex key index
通过索引设置列表元素的值 lset key index value
获取列表指定范围内的元素 lrange key start stop

Hash

介绍 命令
将哈希表key中的字段field的值设置为value hset key fleld value
获取key中field的值 hget key fleld
同时将多个field-value设置到哈希表key hmset key fleld1 value1 fleld2 value2
获取所有给定字段的值 hmget key fleld1 fleld2
获取哈希表中所有的字段和值 hgetall key
获取哈希表中所有的字段 hkeys key
获取哈希表中所有的值 hvals key
查看哈希表中指定key中指定的字段是否存在 hexists key fleld
删除哈希表中指定key中指定的字段 hdel key fleld

Set

介绍 命令
向集合添加一个或多个成员 sadd key member1 member2
获取集合中所有的成员 smembers key
删除并返回集合中的一个随机元素 spop key
获取给定集合的差集 sdiff key1 key2
获取指定的集合的差集并存储至destination指定的key中 sdiffstore destination key1 key2
获取给定集合中的交集 sinter key1 key2
获取指定集合的交集并存储至destination指定的key中 sinterstore destination key1 key2
获取给定集合中的并集 sunion key1 key2
获取指定集合中的并集并存储至destination指定的key中 sunionstore destination key1 key2

zSet

介绍 命令
向集合添加一个或多个成员及分数,或者更新成员分数 zadd key score1 member1 score2 member2
有序集合中对指定成员增加increment值 zincrby key increment member
返回有序集合中指定索引区间的成员 zrange key start stop
返回指定分数区间的成员升序排列 zrangebyscore key min max
返回指定索引区间的成员降序排列 zrevrange key start stop
返回指定分数区间的成员降序排列 zrevrangebyscore key max min
返回指定成员的排名,从0开始 zrevrank key member
返回指定成员的分数 zscore key member

Key

介绍 命令
获取当前实例下所有的key keys *
删除一个或多个key del key1 key2…
判断指定key是否存在 exists key
设置key超时时间,过时删除 expire key seconds
获取key的类型 type key
切换库(0-15) select index

持久化机制

RDB

  • 按照持久化测量定期持久化数据到磁盘文件,存的是数据(key-value)
    RDB.png

AOF

  • 每秒持久化redis命令到磁盘文件,定期做文件压缩
    AOF.png

Jedis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"获取redis实例"
"第一种方法"
/*Jedis jedis = new Jedis("127.0.0.1",6379);
"密码"
jedis.auth("root");*/
"第二种方法 redis://随便起个名字:redis密码@redisIP地址:端口/库"
String uri = "redis://x:root@127.0.0.1:6379/0";
URI u = new URI(uri);//资源对象
Jedis jedis = new Jedis(u);
for(int i=0;i<100;i++) {
jedis.set("b"+i, i+"");
}
"释放"
jedis.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"连接多台实例"
JedisPoolConfig config = new JedisPoolConfig();
config.setMinIdle(5);

"List可以多台redis实例的连接信息"
"一个JedisShardInfo就是一台redis实例的连接信息对象"
List<JedisShardInfo> l = new ArrayList<>();
l.add(new JedisShardInfo(new URI("redis://x:root@127.0.0.1:6379/0")));
l.add(new JedisShardInfo(new URI("redis://x:root@127.0.0.1:6380/0")));

"全局唯一"
ShardedJedisPool pool = new ShardedJedisPool(config,l);
"底层对数据做分片存储或者分区存储"
ShardedJedis resource = pool.getResource();

"0-16384之间的数字"
"hashMap存储 散列结构存储"
for(int i=0;i<1000;i++) {
resource.set("a"+i, i+"");
}

resource.close();

相关文章

MySql常用语法

MySql高级语法