文章目录
Redis安装
参考:
Redis启动关闭
前端方式启动:
直接运行服务脚本redis/bin/redis-server
该方式启动使用的是redis-server这个shell脚本中的默认配置,即官方默认配置
后端模式启动:
该启动方式可以使redis按指定配置文件启动
需要注意的是,redis默认安装完成后没有任何配置文件,需要在源码目录中复制redis.conf配置文件到安装目录
修改redis.conf配置文件
修改redis.conf配置文件,
daemonize yes
开启守护线程
将daemonized设置为yes代表开启守护线程,这样启动redis将不会占用会话窗口
执行以下命令按配置文件启动redis
-
跳转到redis安装目录:
cd /usr/local/redis
-
指定配置文件启动:
./bin/redis-server ./conf/redis.conf
redis默认使用6379端口
如需更改端口号,可在redis.conf文件中进行修改
关闭Redis:
因为Redis中的数据在内存中,在未完成持久化前,强行终止Redis进程可能会导致redis中的数据丢失。
正确停止Redis的方式应该是向Redis服务发送SHUTDOWN命令,方法为:
cd /usr/local/redis
./bin/redis-cli shutdown save
连接Redis客户端
redis是服务端,要操作服务端(存取数据)是通过客户端
在redis的安装目录中有redis的客户端,即redis-cli(Redis Command Line Interface),它是Redis自带的基于命令行的Redis客户端
./redis.cli -h [指定ip地址] -p [指定端口]
./redis.cli
测试响应:
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG
Redis多实例多数据库
redis实例
一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,每个redis实例之间互相隔离。每个redis实例都包括自己的数据库,数据库中可以存储自己的数据
一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库
可以通过select [0->16]
选择连接哪个数据库
注意:redis不支持修改数据库的名称,只能通过select 0、select 1…选择数据库
原则上:
不同的应用系统要使用不同的redis实例而不是使用同一个redis实例下的不同数据库
同一实例下,与库相关的两组清空命令:
FlushDB -- 清空当前库下所有key
FlushAll -- 清空当前实例下所有库的key
与Key相关的N组命令
1.DEL指令
- 语法 :
DEL key [key ...]
- 作用 : 删除给定的一个或多个key 。不存在的key 会被忽略。
- 可用版本: >= 1.0.0
- 返回值: 被删除key 的数量。
2.EXISTS指令
- 语法:
EXISTS key
- 作用: 检查给定key 是否存在。
- 可用版本: >= 1.0.0
- 返回值: 若key 存在,返回1 ,否则返回0。
3.EXPIRE
- 语法:
EXPIRE key seconds (单位:秒)
- 作用: 为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
- 可用版本: >= 1.0.0
- 时间复杂度: O(1)
- 返回值:设置成功返回1 。
4.KEYS
- 语法 :
KEYS pattern(类正则表达式)
- 作用 : 查找所有符合给定模式pattern 的key 。
- 语法:
KEYS * 匹配数据库中所有key 。
KEYS h?llo 模糊一个字符,h匹配hello ,allo 和hxllo 等。
KEYS h*llo 模糊0 ~ n个字符 匹配hllo 和heeeeello 等。
KEYS h[ae]llo 限定[]内的字符 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 “” 隔开 - 可用版本: >= 1.0.0
- 返回值: 符合给定模式的key 列表。
5.MOVE
- 语法 :
MOVE key db
- 作用 : 将当前数据库的key 移动到给定的数据库db 当中。
- 可用版本: >= 1.0.0
- 返回值: 移动成功返回1 ,失败则返回0 。
6.PEXPIRE
- 语法 :
PEXPIRE key milliseconds
- 作用 : 这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 时间复杂度: O(1)
- 返回值:设置成功,返回1 key 不存在或设置失败,返回0
8.TTL
- 语法 :
TTL key
- 作用 : 以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
- 可用版本: >= 1.0.0
- 返回值:
当key 不存在时,返回-2 。
当key 存在但没有设置剩余生存时间时,返回-1 。
否则,以秒为单位,返回key 的剩余生存时间。 - Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
9.PTTL
- 语法 :
PTTL key
- 作用 : 这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
- 否则,以毫秒为单位,返回key 的剩余生存时间。
- 注意 : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
10.RANDOMKEY
- 语法 :
RANDOMKEY
- 作用 : 从当前数据库中随机返回(不删除) 一个key 。
- 可用版本: >= 1.0.0
- 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。
11.RENAME
- 语法 :
RENAME key newkey
- 作用 : 将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。
- 可用版本: >= 1.0.0
- 返回值: 改名成功时提示OK ,失败时候返回一个错误。
12.TYPE
- 语法 :
TYPE key
- 作用 : 返回key 所储存的值的类型。
- 可用版本: >= 1.0.0
- 返回值:
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
Jedis客户端连接Redis
- 修改redis.conf中的bind字段
- 将127.0.0.1修改为0.0.0.0 表示允许一切客户端访问
- 重启redis
在Win下,可以使用图形化界面的客户端连接我们的redis,如图
Redis不仅是使用命令与图形化界面来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。
Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis
导包
- Maven Repositiry:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
单例连接
package com;
import redis.clients.jedis.Jedis;
class Main{
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.31.128", 6379);
jedis.set("name1", "bar");
String name = jedis.get("name1");
System.out.println(name);
jedis.close();
}
}
连接池连接
package com;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
class Main{
public static void main(String[] args) {
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(30);
//最大连接空闲数
config.setMaxIdle(2);
JedisPool pool = new JedisPool(config, "192.168.31.128", 6379);
Jedis jedis = null;
try {
jedis = pool.getResource();
jedis.set("name", "lisi");
String name = jedis.get("name");
System.out.println(name);
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(jedis != null){
//关闭连接
jedis.close();
}
}
}
}
Redis_String相关操作
常用操作命令:
(多是针对key的值进行处理)
命令 | 说明 |
---|---|
set | 设置一个key/value |
get | 根据key获得对应的value |
mset | 一次设置多个key value |
mget | 一次获得多个key的value |
getset | 获得原始key的值,同时设置新值 |
strlen | 获得对应key存储value的长度 |
append | 为对应key的value追加内容 |
getrange 索引0开始 | 截取value的内容 |
setex | 设置一个key存活的有效期(秒)setex + 存活时间 + 值 |
psetex | 设置一个key存活的有效期(毫秒) |
setnx | 存在则不做任何操作,不存在再添加 |
msetnx原子操作(只要有一个存在不做任何操作) | 可以同时设置多个key,只有有一个存在都不保存 |
decr | 进行数值类型的-1操作 如针对age的值 - 1 |
decrby | 根据提供的数据进行减法操作 decrby age 10 |
Incr | 进行数值类型的+1操作 |
incrby | 根据提供的数据进行加法操作 |
Incrbyfloat | 根据提供的数据加入浮点数 |
Jedis String 相关API
//测试String相关
@Test
public void testString(){
//set
jedis.set("name","小陈");
//get
String s = jedis.get("name");
System.out.println(s);
//mset
jedis.mset("content","好人","address","海淀区");
//mget
List<String> mget = jedis.mget("name", "content", "address")</