ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis基本命令及Java API操作

2021-10-04 14:29:56  阅读:175  来源: 互联网

标签:127.0 Java 0.1 Redis 6379 k1 API key integer


一、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

标签:127.0,Java,0.1,Redis,6379,k1,API,key,integer
来源: https://blog.csdn.net/hjjjjjjj_/article/details/120596488

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有