Redis 简述

Redis 简介

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key – value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
  • Redis支持数据的备份,即 master-slave 模式的数据备份。

Redis 优势

  • 性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
  • 丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。

Redis 与其他 key-value 存储有什么不同?

  • Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

redis 的安装

下载安装包,博主采用的是 redis-3.0.5.tar.gz,可以在这里下载.

http://download.csdn.net/detail/u013256816/9487005

安装步骤:

tar -zvxf redis-3.0.5.tar.gz
cd redis-3.0.5
make

redis 服务端开启

./redis-server

开启之后如下图所示:

这种方式是启动的 redis 使用的是默认配置,也可以通过启动参数考古 redis 使用指定配置文件:

./redis-server [redis.conf 的路径]

如果修改 redis.conf,采用 redis 默认的 redis.conf 文件, redis 默认只能通过 127.0.0.1:6379 这个地址访问,这样就只能在本机上操作了,如果想要远程操作就不可行了。这里需要修改 redis.conf 这个配置文件,在配置文件中添加相应的 ip 地址,这里假如添加 ip 地址:10.10.195.112,只需在 redis.conf 这个配置文件中添加:

bind 10.10.195.112
bind 127.0.0.1

这样就可以远程访问 redis 服务器了(先配置,后开启 redis 服务)。

redis 客户端连接

  • ./redis-cli (本地)
  • ./redis-cli -h [host] -p [port] -a [password] (远程服务器)

Jedis 开发

使用 java 开发 redis,博主使用的是 jedis,需要引入 jedis 的 jar,可以在这里下载。还需要 commons-pool.jar 包

http://download.csdn.net/detail/u013256816/9487008

连接

Jedis jedis = new Jedis(“10.10.195.112”);
System.out.println(jedis.ping());

输出:PONG

操作字符串

jedis.set(“name”, “zzh”);
System.out.println(jedis.get(“name”));

输出:zzh

操作列表

jedis.lpush(“nblist”, “jj”);
jedis.lpush(“nblist”, “jj”);
jedis.lpush(“nblist”, “yy”);
jedis.lpush(“nblist”, “qq”);
List<String> list = jedis.lrange(“nblist”, 0, -1);
int length = list.size();
for(int i=0;i<length;i++)
{
    System.out.println(list.get(i));
}

输出:

qq
yy
jj
jj

获取 redis 中所有的键

Set<String> set = jedis.keys(“*”);
for(String key : set)
{
    System.out.println(key);
}

输出:

nam
name
tutorial
list
tutorial-list
nblist
tutoriallist
keyname
user
listt
zsetkey
hash-key

Redis 常用命令

1. 连接操作命令

  • quit:关闭连接(connection)
  • auth:简单密码认证
  • help cmd: 查看 cmd 帮助,例如:help quit

2 持久化

  • save:将数据同步保存到磁盘
  • bgsave:将数据异步保存到磁盘
  • lastsave:返回上次成功将数据保存到磁盘的 Unix 时戳
  • shutdown:将数据同步保存到磁盘,然后关闭服务

3. 远程服务控制

  • info:提供服务器的信息和统计
  • monitor:实时转储收到的请求
  • slaveof:改变复制策略设置
  • config:在运行时配置 Redis 服务器

4. 对 key 操作的命令

  • exists(key):确认一个 key 是否存在
  • del(key):删除一个 key
  • type(key):返回值的类型
  • keys(pattern):返回满足给定 pattern 的所有 key
  • randomkey:随机返回 key 空间的一个
  • keyrename(oldname, newname):重命名 key
  • dbsize:返回当前数据库中 key 的数目
  • expire:设定一个 key 的活动时间(s)
  • ttl:获得一个 key 的活动时间
  • select(index):按索引查询
  • move(key, dbindex):移动当前数据库中的 key 到 dbindex 数据库
  • flushdb:删除当前选择数据库中的所有 key
  • flushall:删除所有数据库中的所有 key

5. String

  • set(key, value):给数据库中名称为 key 的 string 赋予值 value
  • get(key):返回数据库中名称为 key 的 string 的 value
  • getset(key, value):给名称为 key 的 string 赋予上一次的 value
  • mget(key1, key2,…, key N):返回库中多个 string 的 value
  • setnx(key, value):添加 string,名称为 key,值为 value
  • setex(key, time, value):向库中添加 string,设定过期时间 time
  • mset(key N, value N):批量设置多个 string 的值
  • msetnx(key N, value N):如果所有名称为 key i 的 string 都不存在
  • incr(key):名称为 key 的 string 增 1 操作
  • incrby(key, integer):名称为 key 的 string 增加 integer
  • decr(key):名称为 key 的 string 减 1 操作
  • decrby(key, integer):名称为 key 的 string 减少 integer
  • append(key, value):名称为 key 的 string 的值附加 value
  • substr(key, start, end):返回名称为 key 的 string 的 value 的子串

6. List

  • rpush(key, value):在名称为 key 的 list 尾添加一个值为 value 的元素
  • lpush(key, value):在名称为 key 的 list 头添加一个值为 value 的 元素
  • llen(key):返回名称为 key 的 list 的长度
  • lrange(key, start, end):返回名称为 key 的 list 中 start 至 end 之间的元素
  • ltrim(key, start, end):截取名称为 key 的 list
  • lindex(key, index):返回名称为 key 的 list 中 index 位置的元素
  • lset(key, index, value):给名称为 key 的 list 中 index 位置的元素赋值
  • lrem(key, count, value):删除 count 个 key 的 list 中值为 value 的元素
  • lpop(key):返回并删除名称为 key 的 list 中的首元素
  • rpop(key):返回并删除名称为 key 的 list 中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop 命令的 block 版本。
  • brpop(key1, key2,… key N, timeout):rpop 的 block 版本。
  • rpoplpush(srckey, dstkey):返回并删除名称为 srckey 的 list 的尾元素,并将该元素添加到名称为 dstkey 的 list 的头部

7. Set

  • sadd(key, member):向名称为 key 的 set 中添加元素 member
  • srem(key, member) :删除名称为 key 的 set 中的元素 member
  • spop(key) :随机返回并删除名称为 key 的 set 中一个元素
  • smove(srckey, dstkey, member) :移到集合元素
  • scard(key) :返回名称为 key 的 set 的基数
  • sismember(key, member) :member 是否是名称为 key 的 set 的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集并将交集保存到 dstkey 的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并将并集保存到 dstkey 的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集并将差集保存到 dstkey 的集合
  • smembers(key) :返回名称为 key 的 set 的所有元素
  • srandmember(key) :随机返回名称为 key 的 set 的一个元素

8. Hash

  • hset(key, field, value):向名称为 key 的 hash 中添加元素 field
  • hget(key, field):返回名称为 key 的 hash 中 field 对应的 value
  • hmget(key, (fields)):返回名称为 key 的 hash 中 field i 对应的 value
  • hmset(key, (fields)):向名称为 key 的 hash 中添加元素 field
  • hincrby(key, field, integer):将名称为 key 的 hash 中 field 的 value 增加 integer
  • hexists(key, field):名称为 key 的 hash 中是否存在键为 field 的域
  • hdel(key, field):删除名称为 key 的 hash 中键为 field 的域
  • hlen(key):返回名称为 key 的 hash 中元素个数
  • hkeys(key):返回名称为 key 的 hash 中所有键
  • hvals(key):返回名称为 key 的 hash 中所有键对应的 value
  • hgetall(key):返回名称为 key 的 hash 中所有的键(field)及其对应的 value
标签:Redis 发布于:2019-10-17 12:23:51