Redis基本命令及Java API操作
2021/10/4 19:12:32
本文主要是介绍Redis基本命令及Java API操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、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
这篇关于Redis基本命令及Java API操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南