一、Redis基本命令
1.1、关于键(key)的操作
keys *:查看当前库所有key (匹配:keys *1)
exists key:判断某个key是否存在
type key:查看你的key是什么类型
del key:删除指定的key数据
unlink key:根据value选择非阻塞删除(仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。)
expire key 10:10秒钟:为给定的key设置过期时间
ttl key:查看还有多少秒过期,-1表示永不过期,-2表示已过期select:命令切换数据库
dbsize:查看当前数据库的key的数量
flushdb:清空当前库
flushall:通杀全部库
//给(key)name设置值
127.0.0.1:6379> set name lucy
OK
127.0.0.1:6379> set age 10
OK
//查看所有键(key)
127.0.0.1:6379> keys *
1) "age"
2) "name"
//查看key的类型
127.0.0.1:6379> type age
string
127.0.0.1:6379> type name
string
//判断key是否存在
127.0.0.1:6379> exists age
(integer) 1
127.0.0.1:6379> exists username
(integer) 0
//删除指定的键
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> keys *
1) "name"
//给指定key设置过期时间
127.0.0.1:6379> expire name 10
(integer) 1
//查看指定key过期时间
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> set sex 0
OK
//查看当前数据库key的数量
127.0.0.1:6379> dbsize
(integer) 1
//切换下标为1的数据库,(数据库的下标从0开始)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name cat
OK
//切换下标为0的数据库
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set age 10
OK
//清空所有数据库的数据
127.0.0.1:6379> flushall
OK
//以下命令验证是否清空成功
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 0
127.0.0.1:6379[1]> select 0
OK
1.2、String类型常用命令
set <key> <value>:添加键值对
get <key>:查询对应键值
append <key> <value>:将给定的<value> 追加到原值的末尾
strlen <key>:获得值的长度
setnx <key> <value>:只有在 key 不存在时 设置 key 的值
incr <key>:将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1
decr <key>:将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1
incrby / decrby <key> <步长>:将 key 中储存的数字值增减。自定义步长。
getrange <key> <起始位置> <结束位置>:获得值的范围,类似java中的substring,(前包,后包)
setrange <key> <起始位置> <value>:用 <value> 覆写<key>所储存的字符串值,从<起始位置>开始(**索引从0开始)。
setex <key> <过期时间> <value>:设置键值的同时,设置过期时间,单位秒。
getset <key> <value>:以新换旧,设置了新值同时获得旧值
//添加键值对
127.0.0.1:6379> set k1 v1
OK
//获取对应键的值
127.0.0.1:6379> get k1
"v1"
//在当前键的值后面加上abc
127.0.0.1:6379> append k1 abc
(integer) 5
//获取键的值查看abc是否加入成功
127.0.0.1:6379> get k1
"v1abc"
//查看当前键的长度
127.0.0.1:6379> strlen k1
(integer) 5
//在当前键不存在情况下,添加键值对,这里键k1存在,所以添加失败
127.0.0.1:6379> setnx k1 a
(integer) 0
//这里键k2不存在,所以添加成功
127.0.0.1:6379> setnx k2 1
(integer) 1
//对指定键的值自增1
127.0.0.1:6379> incr k2
(integer) 2
127.0.0.1:6379> get k2
"2"
//对指定键的值自减1
127.0.0.1:6379> decr k2
(integer) 1
127.0.0.1:6379> get k2
"1"
//对键k2增加步长为10的数
127.0.0.1:6379> incrby k2 10
(integer) 11
127.0.0.1:6379> get k2
"11"
//获取键k1对应下标内的值(包前包后)
127.0.0.1:6379> getrange k1 0 1
"v1"
//将na覆盖掉键k1起始下标为0的值
127.0.0.1:6379> setrange k1 0 na
(integer) 5
127.0.0.1:6379> get k1
"naabc"
//添加键值对k3,并设置过期时间,单位为秒
127.0.0.1:6379> setex k3 2 v3
OK
//2秒后查看键发现已过期
127.0.0.1:6379> get k3
(nil)
//给键k2设置新值100并返回旧值11
127.0.0.1:6379> getset k2 100
"11"
127.0.0.1:6379> get k2
"100"
1.3、list类型常用命令
lpush/rpush <key> <value1> <value2> <value3> .... :从左边/右边插入一个或多个值。
lpop/rpop <key> [count]:从左边/右边弹出一个值(值会被删除),count表示设置弹出值的个数(可选)。(当键对应的值被全部弹出,键也会被删除)
rpoplpush <key1> <key2>:从<key1>列表右边弹出一个值,插到<key2>列表左边。
lrange <key> <start> <stop>:按照索引下标获得元素(从左到右)(0到-1表示获取所有)
lindex <key> <index>:按照索引下标获得元素(从左到右)(值不会被删除)
llen <key>:获得列表长度
linsert <key> before <value> <newvalue>:从<value>的前面插入<newvalue>插入值,(这里的before也可改成after,表示从后面插入)
lrem <key> <n> <value>:从左边删除n个value(从左到右)
lset<key> <index> <value>:将列表key下标为index的值替换成value
//从左添加列表值
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
//从左往右获取列表k1的值
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
//从左弹出k1的一个值(值会被删除)
127.0.0.1:6379> lpop k1
"v3"
127.0.0.1:6379> lpush k2 redis java mysql
(integer) 3
//从右弹出k1的一个值然后从左插入到k2中
127.0.0.1:6379> rpoplpush k1 k2
"v1"
//验证上一个操作弹出成功
127.0.0.1:6379> lrange k1 0 -1
1) "v2"
//验证上一个操作插入成功
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "mysql"
3) "java"
4) "redis"
//获取k2下标为0的值
127.0.0.1:6379> lindex k2 0
"v1"
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "mysql"
3) "java"
4) "redis"
//获取k2的长度
127.0.0.1:6379> llen k2
(integer) 4
//从k1的值v2前面插入abc
127.0.0.1:6379> linsert k1 before v2 abc
(integer) 2
//验证上一个操作是否成功
127.0.0.1:6379> lrange k1 0 -1
1) "abc"
2) "v2"
//从k2的左边删除1个值为mysql的元素
127.0.0.1:6379> lrem k2 1 mysql
(integer) 1
//查看是否操作成功
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "java"
3) "redis"
//将列表k2下标为0的值替换成mysql
127.0.0.1:6379> lset k2 0 mysql
OK
//查看是否操作成功
127.0.0.1:6379> lrange k2 0 -1
1) "mysql"
2) "java"
3) "redis"
1.4、set类型常用命令
sadd <key> <value1> <value2> ..... :将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers <key>:取出该集合的所有值。
sismember <key> <value>:判断集合<key>是否为含有该<value>值,有1,没有0
scard<key>:返回该集合的元素个数
srem <key> <value1> <value2> .... :删除集合中的某个元素。
spop <key>:随机从该集合中弹出一个值。(值会被删除)
srandmember <key> <n>:随机从该集合中取出n个值。不会从集合中删除 。
smove <source> <destination> value:把集合中一个值从一个集合移动到另一个集合
sinter <key1> <key2>:返回两个集合的交集元素。
sunion <key1> <key2>:返回两个集合的并集元素。
sdiff <key1> <key2>:返回两个集合的差集元素(key1中的,不包含key2中的)
//添加set类型的键值对
127.0.0.1:6379> sadd k1 v1 v2 v3
(integer) 3
//取出集合k1的所有值
127.0.0.1:6379> smembers k1
1) "v1"
2) "v2"
3) "v3"
//判断集合k1中是否存在值v4
127.0.0.1:6379> sismember k1 v4
(integer) 0
//查看集合k1的长度
127.0.0.1:6379> scard k1
(integer) 3
//删除集合k1中的元素v3
127.0.0.1:6379> srem k1 v3
(integer) 1
//随机从集合k1中弹出一个值。
127.0.0.1:6379> spop k1
"v2"
//验证弹出的值会被删除
127.0.0.1:6379> smembers k1
1) "v1"
//随机集合k1中取出1个值
127.0.0.1:6379> srandmember k1 1
1) "v1"
//验证取出的值不会被删除
127.0.0.1:6379> smembers k1
1) "v1"
127.0.0.1:6379> sadd k2 a b c
(integer) 3
//从集合k2中移出元素a并添加到k1中
127.0.0.1:6379> smove k2 k1 a
(integer) 1
//验证是否添加成功
127.0.0.1:6379> smembers k1
1) "a"
2) "v1"
//验证是否移出成功
127.0.0.1:6379> smembers k2
1) "c"
2) "b"
//返回两个集合的交集元素
127.0.0.1:6379> sinter k1 k2
(empty array)
//返回两个集合的并集元素
127.0.0.1:6379> sunion k1 k2
1) "c"
2) "a"
3) "v1"
4) "b"
//返回两个集合的差集元素(key1中不包含key2中的元素)
127.0.0.1:6379> sdiff k1 k2
1) "a"
2) "v1"
1.5、hash常用命令
hset <key> <field> <value>:给<key>集合中的 <field>键赋值<value>
hget <key1> <field>:从<key1>集合<field>取出 value
hmset <key1> <field1> <value1> <field2> <value2>... :批量设置hash的值
hexists <key1> <field>:查看哈希表 key 中,给定域 field 是否存在。
hkeys <key>:列出该hash集合的所有field
hvals <key>:列出该hash集合的所有value
hincrby <key> <field> <increment>:为哈希表 key 中的域 field 的值加上增量 1 -1
hsetnx <key> <field> <value>:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在时有效
//给k1中的name属性赋值
127.0.0.1:6379> hset k1 name lisi
(integer) 1
//获取k1中的name属性值
127.0.0.1:6379> hget k1 name
"lisi"
//批量添加k1中的属性和值
127.0.0.1:6379> hmset k1 age 10 sex 0
OK
//判断k1中是否存在属性name
127.0.0.1:6379> hexists k1 name
(integer) 1
//查看k1中的所有属性
127.0.0.1:6379> hkeys k1
1) "name"
2) "age"
3) "sex"
//查看k1中的所有属性的值
127.0.0.1:6379> hvals k1
1) "lisi"
2) "10"
3) "0"
//为k1中的属性age的值加上增量2
127.0.0.1:6379> hincrby k1 age 2
(integer) 12
//查看结果
127.0.0.1:6379> hget k1 age
"12"
//将k1中的属性name的值设置为lusy,因为属性name存在,所以设置失败时有效
127.0.0.1:6379> hsetnx k1 name lusy
(integer) 0
//将k1中的属性phone的值设置为123,因为属性phone不存在,所以设置成功
127.0.0.1:6379> hsetnx k1 phone 123
(integer) 1
1.6、zset常用命令
zadd <key> <score1> <value1> <score2> <value2>…:将一个或多个 member 元素及score 值加入到有序集 key 当中。
zrange <key> <start> <stop> [WITHSCORES] :返回有序集 key 中,下标在<start><stop>之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。
zrange key min max byscore [withscores] [limit offset count]:返回有序集 key 中,所有 score 值介于 min 和 max 之间 (包括等于 min 或 max )的成员。(不加byscore,min与max表示下标),有序集成员按 score 值递增(从小到大)次序排列。
zrevrange key max min [withscores] [limit offset count] :同上,改为从大到小列。
zincrby <key> <increment> <value> :为元素的score加上增量
zrem <key> <value>:删除该集合下,指定值的元素
zcount <key> <min> <max>:统计该集合,分数区间内的元素个数
zrank <key> <value>:返回该值在集合中的排名,从0开始。(从小到大)
//将一个或多个元素及其score值加入到有序集k1当中。
127.0.0.1:6379> zadd k1 500 v1 100 v2 300 v3
(integer) 3
//返回有序集k1中,下标在0 -1之间的元素并且带分数带
127.0.0.1:6379> zrange k1 0 -1 withscores
1) "v2"
2) "100"
3) "v3"
4) "300"
5) "v1"
6) "500"
//返回k1中分数在200到600之间的元素与分数并从小到大排列
127.0.0.1:6379> zrange k1 200 600 byscore withscores
1) "v3"
2) "300"
3) "v1"
4) "500"
//返回k1中下标在0到2之间的元素与分数并从大到小排列
127.0.0.1:6379> zrevrange k1 0 2 withscores
1) "v1"
2) "500"
3) "v3"
4) "300"
5) "v2"
6) "100"
//将k1中元素为v1的分数加上100
127.0.0.1:6379> zincrby k1 100 v1
"600"
//删除k1中的元素v3
127.0.0.1:6379> zrem k1 v3
(integer) 1
//统计k1中分数从100到500的元素
127.0.0.1:6379> zcount k1 100 500
(integer) 1
//返回元素v2在k1中的排名(从小到大)
127.0.0.1:6379> zrank k1 v2
(integer) 0
//返回元素v1在k1中的排名(从小到大)
127.0.0.1:6379> zrank k1 v1
(integer) 1
二、常用API操作
2.1、准备
在redis.conf中注释掉bind 127.0.0.1,然后将protected-mode yes中的yes改成no,再关闭掉Linux的防火墙,否则其他设备将无法连接到Linux中的redis
1.使用vi编辑器打开redis.conf
2.命令模式使用:/bind命令找到bind 127.0.0.1,使用i进入编辑模式注释掉
3.用同样的方法找到protected-mode yes,将yes改成no
4.使用esc退出编辑模式,使用:wq命令保存并退出
5.执行systemctl stop firewalld命令关闭防火墙
6.重启redis
当前状态表示防火墙已关闭
2.2、测试
Jedis对象包含了所有Redis的命令操作,所以可以用Jedis对象操作Redis
2.2.1、导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
2.2.2、测试API操作
public class Demo1 {
public static void main(String[] args) {
//创建Jedis对象
//192.168.117.131:Linux的ip地址,redis是在Linux上启动的
//6379:redis端口号
Jedis jedis = new Jedis("192.168.117.131",6379);
//测试是否连接成功
String pong = jedis.ping();
System.out.println("连接成功:" + pong);
System.out.println("==============key==============");
/**
* 操作Key
*/
jedis.set("k1","v1");
jedis.set("k2","v2");
jedis.set("k3","v3");
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.println(key);
}
//查看是否存在当前key
System.out.println(jedis.exists("k1"));
//查看key的过期时间
System.out.println(jedis.ttl("k1"));
//获取key的值
System.out.println(jedis.get("k1"));
System.out.println("==============String==============");
/**
* 操作String
*/
//存储多个字符串类型的键值对
jedis.mset("str1","v1","str2","v2","str3","v3");
//获取多个key的值
System.out.println(jedis.mget("str1","str2","str3"));
System.out.println("==============list==============");
/**
* 操作List
*/
jedis.lpush("mylist","l1","l2","l3");
List<String> mylist = jedis.lrange("mylist", 0, -1);
for (String s : mylist) {
System.out.println(s);
}
System.out.println("==============set==============");
/**
* 操作set
*/
jedis.sadd("orders","order01","order02","order03");
Set<String> orders = jedis.smembers("orders");
for (String order : orders) {
System.out.println(order);
}
System.out.println("==============hash==============");
/**
* 操作hash
*/
jedis.hset("hash1","username","lisi");
System.out.println(jedis.hget("hash1","username"));
Map<String, String> map = new HashMap<String, String>();
map.put("phone","10000000000");
map.put("age","20");
map.put("email","abc@123.com");
//添加map
jedis.hmset("hash2", map);
List<String> result = jedis.hmget("hash2", "phone", "age", "email");
for (String s : result) {
System.out.println(s);
}
System.out.println("==============zset==============");
/**
* 操作zset
*/
jedis.zadd("zset01",100d,"z3");
jedis.zadd("zset01",90d,"l4");
jedis.zadd("zset01",80d,"w5");
jedis.zadd("zset01",70d,"z6");
Set<String> zset01 = jedis.zrange("zset01", 0, -1);
for (String s : zset01) {
System.out.println(s);
}
}
}
2.2.3、结果
连接成功:PONG
==============key==============
k3
k1
k2
true
-1
v1
==============String==============
[v1, v2, v3]
==============list==============
l3
l2
l1
==============set==============
order01
order03
order02
==============hash==============
lisi
10000000000
20
abc@123.com
==============zset==============
z6
w5
l4
z3