博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis常用命令操作String类型数据+hash命令+list命令
阅读量:4171 次
发布时间:2019-05-26

本文共 9817 字,大约阅读时间需要 32 分钟。

1、Redis常用命令操作String类型数据

keys*:查询当前的存储空间中,所有存在的key值

127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379>

set [key] [value]:设置存储的key-value结构的数据,value是字符串;覆盖已经存在的key-value数据

127.0.0.1:6379> set city beijingOK127.0.0.1:6379> keys *1) "city"127.0.0.1:6379>
127.0.0.1:6379> set city shanghaiOK127.0.0.1:6379> keys *1) "city"127.0.0.1:6379> get city"shanghai"127.0.0.1:6379> set city beijingOK127.0.0.1:6379> get city"beijing"

get [key]:获取当前key对应的value数据

127.0.0.1:6379> set name xiaoOK127.0.0.1:6379> get name"xiao"127.0.0.1:6379>

select [整数值默认0-15]:redis存在默认的0-15号的数据分库;16个数据库,默认使用0号,功能在现在不常用.是早期的遗留功能;java代码不支持分库的api

127.0.0.1:6379> keys *1) "city"2) "name"127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> keys *(empty list or set)127.0.0.1:6379[1]>

exists [key]:查看当前redis节点是否包含查询的key-value数据;

get是否也具备这个功能?Get也具备这个功能,redis存储的字符串类型数据value达到最大值512m;get命令判断key的存在会占用读取value过程的资源,效率低;

127.0.0.1:6379> exists name(integer) 1127.0.0.1:6379> exists nil(integer) 0127.0.0.1:6379>

del [key]:删除当前存储的key-value数据

127.0.0.1:6379> keys *1) "city"2) "name"127.0.0.1:6379> del name(integer) 1127.0.0.1:6379> keys *1) "city"

type [key]:查看当前key对应的value的数据类型

127.0.0.1:6379> type citystring

help [命令名称]:查询当前命令的使用规则

127.0.0.1:6379> help set  SET key value [EX seconds] [PX milliseconds] [NX|XX]  summary: Set the string value of a key  since: 1.0.0  group: string

注意:help的返回内容不全面;真正需要查询某个命令的使用规则,可以到官网

flushall:将当前的数据库[0-15]的所有数据,flush到指定的持久化文件中(dump.rbd);可以代替清空当前数据库的key-value数据的功能;

127.0.0.1:6379> set name xiaoOK127.0.0.1:6379> set gender maleOK127.0.0.1:6379> keys *1) "city"2) "gender"3) "name"127.0.0.1:6379> flushall4599:M 23 Feb 11:23:35.394 * DB saved on diskOK127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379>

flushdb : 指定清空或者flush当前数据库的数据到磁盘文件中

127.0.0.1:6379> set name xiao      设置数据库0OK127.0.0.1:6379> set city beijingOK127.0.0.1:6379> keys *1) "city"2) "name"127.0.0.1:6379> select 1          设置数据库1OK127.0.0.1:6379[1]> keys *(empty list or set)127.0.0.1:6379[1]> set name xiaoOK127.0.0.1:6379[1]> set city beijingOK127.0.0.1:6379[1]> flushdb        清空当前数据库1OK127.0.0.1:6379[1]> keys *(empty list or set)127.0.0.1:6379[1]> select 0       并不会影响数据库0OK127.0.0.1:6379> keys *1) "city"2) "name"127.0.0.1:6379>

incr、decr 自增,自减:对于字符串纯数字的数据可以进行自增和自减操作;

127.0.0.1:6379> set num1 100OK127.0.0.1:6379> incr num1(integer) 101127.0.0.1:6379> type num1string127.0.0.1:6379> set num2 oo100OK127.0.0.1:6379> incr num2(error) ERR value is not an integer or out of range 不能用自增自减操作非纯数字的字符串127.0.0.1:6379> decr num1(integer) 100127.0.0.1:6379>

incrby [key] [整数] decrby [key] [整数]:自增自减指定数量的值;

127.0.0.1:6379> incrby num1 5   自增5(integer) 105127.0.0.1:6379> decrby num1 50  自减50(integer) 55127.0.0.1:6379>

自增自减的使用情景:内存的数据库的计算需要消耗资源;

例如:上线人数:50399,数字时刻跳动的;不会一个一个添加或者减少;

apend [key] [value]:在指定key的value上追加数据;

127.0.0.1:6379> append city daxing(integer) 13127.0.0.1:6379> get city"beijingdaxing"127.0.0.1:6379>

expire [key] 时间数字(单位秒):设置当前key-value数据的存活时间;

127.0.0.1:6379> expire bomb 100(integer) 1127.0.0.1:6379> ttl bomb       ttl的命令可以查看剩余的寿命(integer) 93寿命是整数-2代表超时,大于0代表存活描述,永久存活的值是-1127.0.0.1:6379> set bomb c4OK127.0.0.1:6379> expire bomb 100(integer) 1127.0.0.1:6379> ttl bomb(integer) 93127.0.0.1:6379> ttl bomb(integer) 88127.0.0.1:6379> set bomb2 c5OK127.0.0.1:6379> expire bomb2 10(integer) 1127.0.0.1:6379> ttl bomb2(integer) 7127.0.0.1:6379> ttl bomb2(integer) 6127.0.0.1:6379> ttl bomb2(integer) 5127.0.0.1:6379> ttl bomb2(integer) 0127.0.0.1:6379> ttl bomb2(integer) -2127.0.0.1:6379> ttl bomb2(integer) -2127.0.0.1:6379> ttl name(integer) -1127.0.0.1:6379> keys *    存活时间变为-2,则key不再存在1) "num01"2) "num03"3) "city"4) "num1"5) "num02"6) "num2"7) "name"127.0.0.1:6379> ttl num1(integer) -1127.0.0.1:6379>

使用场景:可以作为抢单,秒杀的倒计时;如果单位是秒的话不够精确,至少要毫秒

pexpire [key]时间整数[毫秒]

127.0.0.1:6379> pexpire bomb3 15000(integer) 1127.0.0.1:6379> ttl bomb3(integer) 11

2、 Redis的hash命令

Hash类型:类似于对象,也是 属性-值 的结构

在这里插入图片描述
HGET key field
HMSET key field value [field value…]
HMGET key field value [field value…]
HGETALL key

127.0.0.1:6379> hset user username chenchen(integer) 1127.0.0.1:6379> hget user username"chenchen"127.0.0.1:6379> hset user username chen   覆盖原来的chenchen(integer) 0127.0.0.1:6379> keys user1) "user"127.0.0.1:6379> hgetall user     得到所有的 属性-值1) "username"2) "chen"127.0.0.1:6379> hset user age 30(integer) 1127.0.0.1:6379> hgetall user    得到所有的 属性-值1) "username"2) "chen"3) "age"4) "30"

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0

hmset和hmget设置和获取对象属性

127.0.0.1:6379> hmset person username tony age 18OK127.0.0.1:6379> hmget person age username1) "18"2) "tony"127.0.0.1:6379> hgetall person   得到所有的属性---值1) "username"2) "tony"3) "age"4) "18"

hexists属性是否存在

127.0.0.1:6379> hexists killer(error) ERR wrong number of arguments for 'hexists' command127.0.0.1:6379> hexists killer a(integer) 0127.0.0.1:6379> hexists user username(integer) 1127.0.0.1:6379> hexists person age(integer) 1127.0.0.1:6379>

hdel删除对象字段

127.0.0.1:6379> hdel user age(integer) 1127.0.0.1:6379> hgetall user1) "username"2) "chen"127.0.0.1:6379> hgetall person1) "username"2) "tony"3) "age"4) "18"

只获取字段名hkeys或字段值hvals

127.0.0.1:6379> hkeys person   获取key为person的所有字段名1) "username"2) "age"127.0.0.1:6379> hvals person  获取key为person的所有字段值1) "tony"2) "18"

获取字段数量hlen

127.0.0.1:6379> hlen user(integer) 1127.0.0.1:6379> hlen person(integer) 2127.0.0.1:6379>

3、Redis的list命令

查看list:lrange [key] start stop

redis 127.0.0.1:6379> lrange mylist3  0  -1

起始位置start 结束位置stop 分别对应的是元素的下标,

如果stop=-1展示从start位置到结束的所有元素

lpush

在key对应list的头部添加字符串元素(上为头,下为尾)

redis 127.0.0.1:6379> lpush mylist "world"(integer) 1redis 127.0.0.1:6379> lpush mylist "hello"(integer) 2redis 127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "world"redis 127.0.0.1:6379>

rpush

在key对应list的尾部添加字符串元素

redis 127.0.0.1:6379> rpush mylist2 "hello"(integer) 1redis 127.0.0.1:6379> rpush mylist2 "world"(integer) 2redis 127.0.0.1:6379> lrange mylist2 0 -11) "hello"2) "world"redis 127.0.0.1:6379>

linsert:在key对应list的特定位置之前或之后添加字符串元素

redis 127.0.0.1:6379> rpush mylist3 "hello"(integer) 1redis 127.0.0.1:6379> rpush mylist3 "world"(integer) 2redis 127.0.0.1:6379> linsert mylist3 before "world" "there"(integer) 3redis 127.0.0.1:6379> lrange mylist3 0 -11) "hello"2) "there"3) "world"redis 127.0.0.1:6379>redis 127.0.0.1:6379> linsert mylist3 after "world" "there"(integer) 4redis 127.0.0.1:6379> lrange mylist3 0 -11) "hello"2) "there"3) "world"4)”there”

lset:设置list中指定下标的元素值

redis 127.0.0.1:6379> rpush mylist4 "one"(integer) 1redis 127.0.0.1:6379> rpush mylist4 "two"(integer) 2redis 127.0.0.1:6379> rpush mylist4 "three"(integer) 3redis 127.0.0.1:6379> lset mylist4 0 "four"OKredis 127.0.0.1:6379> lset mylist4 -2 "five" 倒数第二OKredis 127.0.0.1:6379> lrange mylist4 0 -11) "four"2) "five"3) "three"redis 127.0.0.1:6379>

lrem:从key对应list中删除count个和value相同的元素.

count>0时,按从头到尾(上到下)的顺序删除

redis 127.0.0.1:6379> rpush mylist5 "hello"(integer) 1redis 127.0.0.1:6379> rpush mylist5 "hello"(integer) 2redis 127.0.0.1:6379> rpush mylist5 "foo"(integer) 3redis 127.0.0.1:6379> rpush mylist5 "hello"(integer) 4redis 127.0.0.1:6379> lrem mylist5 2 "hello"  从最上面开始删除两个hello元素(integer) 2redis 127.0.0.1:6379> lrange mylist5 0 -11) "foo"2) "hello"redis 127.0.0.1:6379>

count<0时,按从尾到头(下到上)的顺序删除

redis 127.0.0.1:6379> rpush mylist6 "hello"(integer) 1redis 127.0.0.1:6379> rpush mylist6 "hello"(integer) 2redis 127.0.0.1:6379> rpush mylist6 "foo"(integer) 3redis 127.0.0.1:6379> rpush mylist6 "hello"(integer) 4redis 127.0.0.1:6379> lrem mylist6 -2 "hello"   从最下面开始删除两个hello元素(integer) 2redis 127.0.0.1:6379> lrange mylist6 0 -11) "hello"2) "foo"redis 127.0.0.1:6379>

count=0时,删除全部

redis 127.0.0.1:6379> rpush mylist7 "hello"(integer) 1redis 127.0.0.1:6379> rpush mylist7 "hello"(integer) 2redis 127.0.0.1:6379> rpush mylist7 "foo"(integer) 3redis 127.0.0.1:6379> rpush mylist7 "hello"(integer) 4redis 127.0.0.1:6379> lrem mylist7 0 "hello"    删除所有的hello元素(integer) 3redis 127.0.0.1:6379> lrange mylist7 0 -11) "foo"redis 127.0.0.1:6379>

ltrim:保留指定key 的值范围内的数据

redis 127.0.0.1:6379> rpush mylist8 "one"(integer) 1redis 127.0.0.1:6379> rpush mylist8 "two"(integer) 2redis 127.0.0.1:6379> rpush mylist8 "three"(integer) 3redis 127.0.0.1:6379> rpush mylist8 "four"(integer) 4redis 127.0.0.1:6379> ltrim mylist8 1 -1保留下标为1到最后(也就是删除下标为0的元素)OKredis 127.0.0.1:6379> lrange mylist8 0 -11) "two"2) "three"3) "four"

lpop:从list的头部删除元素,并返回删除元素

redis 127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "world"redis 127.0.0.1:6379> lpop mylist  删除最上面的元素"hello"redis 127.0.0.1:6379> lrange mylist 0 -11) "world"redis 127.0.0.1:6379>

rpop:从list的尾部删除元素,并返回删除元素:

redis 127.0.0.1:6379> lrange mylist2 0 -11) "hello"2) "world"redis 127.0.0.1:6379> rpop mylist2  删除最下面的元素"world"redis 127.0.0.1:6379> lrange mylist2 0 -11) "hello"redis 127.0.0.1:6379>

rpoplpush:从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil

redis 127.0.0.1:6379> lrange mylist5 0 -11) "three"2) "foo"3) "hello"redis 127.0.0.1:6379> lrange mylist6 0 -11) "hello"2) "foo"redis 127.0.0.1:6379> rpoplpush mylist5 mylist6"hello"redis 127.0.0.1:6379> lrange mylist5 0 -11) "three"2) "foo"redis 127.0.0.1:6379> lrange mylist6 0 -1    把第一个list的尾部元素hello添加到第二个1) "hello"			list的头部。2) "hello"			结果是第一个list少一个元素,第二个list多一个元素3) "foo"		redis 127.0.0.1:6379>

lindex:返回名称为key的list中index位置的元素

redis 127.0.0.1:6379> lrange mylist5 0 -11) "three"2) "foo"redis 127.0.0.1:6379> lindex mylist5 0"three"redis 127.0.0.1:6379> lindex mylist5 1"foo"redis 127.0.0.1:6379>

llen:返回key对应list的长度

redis 127.0.0.1:6379> llen mylist5(integer) 2redis 127.0.0.1:6379>

4、 Redis规则

1)默认16个数据库,不能手动起数据库名称,默认0~15,默认0

2)keys和flushdb/flushall在实际开发环境下不要执行
3)它的命令都是原子性(单线程)自增自减,比如:论坛帖子数量,
4)再次set就是修改,它的值会被覆盖
5)pexpire单位毫秒,秒杀+事务
6)redis怎么保存对象?hash,使用string,k=user,v=json
7)管道pipe,本地文件中放数据,数据格式,快速导入,1s中导入上百万数据。管道缓存预热。提前把已经知道要缓存的内容,人工的进行设置。
8)redis.conf中在真实上线时,必须配置最大内存数。如果不配置,redis默认使用所有物理内存。一般值设置:512mb/1gb/2gb/5gb

转载地址:http://nayai.baihongyu.com/

你可能感兴趣的文章
java多线程中的join方法详解
查看>>
idea添加gradle模块报错The project is already registered
查看>>
在C++中如何实现模板函数的外部调用
查看>>
HTML5学习之——HTML 5 拖放
查看>>
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>