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 beijing
OK
127.0.0.1:6379> keys *
1) "city"
127.0.0.1:6379>
127.0.0.1:6379> set city shanghai
OK
127.0.0.1:6379> keys *
1) "city"
127.0.0.1:6379> get city
"shanghai"
127.0.0.1:6379> set city beijing
OK
127.0.0.1:6379> get city
"beijing"

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

127.0.0.1:6379> set name xiao
OK
127.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 1
OK
127.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) 1
127.0.0.1:6379> exists nil
(integer) 0
127.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) 1
127.0.0.1:6379> keys *
1) "city"

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

127.0.0.1:6379> type city
string

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 xiao
OK
127.0.0.1:6379> set gender male
OK
127.0.0.1:6379> keys *
1) "city"
2) "gender"
3) "name"
127.0.0.1:6379> flushall
4599:M 23 Feb 11:23:35.394 * DB saved on disk
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

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

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

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

127.0.0.1:6379> set num1 100
OK
127.0.0.1:6379> incr num1
(integer) 101
127.0.0.1:6379> type num1
string
127.0.0.1:6379> set num2 oo100
OK
127.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) 100
127.0.0.1:6379>

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

127.0.0.1:6379> incrby num1 5   自增5
(integer) 105
127.0.0.1:6379> decrby num1 50  自减50
(integer) 55
127.0.0.1:6379>

自增自减的使用情景:内存的数据库的计算需要消耗资源;
例如:上线人数:50399,数字时刻跳动的;不会一个一个添加或者减少;

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

127.0.0.1:6379> append city daxing
(integer) 13
127.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) 1
127.0.0.1:6379> ttl bomb       ttl的命令可以查看剩余的寿命
(integer) 93
寿命是整数-2代表超时,大于0代表存活描述,永久存活的值是-1
127.0.0.1:6379> set bomb c4
OK
127.0.0.1:6379> expire bomb 100
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) 93
127.0.0.1:6379> ttl bomb
(integer) 88
127.0.0.1:6379> set bomb2 c5
OK
127.0.0.1:6379> expire bomb2 10
(integer) 1
127.0.0.1:6379> ttl bomb2
(integer) 7
127.0.0.1:6379> ttl bomb2
(integer) 6
127.0.0.1:6379> ttl bomb2
(integer) 5
127.0.0.1:6379> ttl bomb2
(integer) 0
127.0.0.1:6379> ttl bomb2
(integer) -2
127.0.0.1:6379> ttl bomb2
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1
127.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) -1
127.0.0.1:6379>

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

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

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

2、 Redis的hash命令

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

RedissonClient 获取list数据 redis获取list命令_redis


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) 1
127.0.0.1:6379> hget user username
"chenchen"
127.0.0.1:6379> hset user username chen   覆盖原来的chenchen
(integer) 0
127.0.0.1:6379> keys user
1) "user"
127.0.0.1:6379> hgetall user     得到所有的 属性-值
1) "username"
2) "chen"
127.0.0.1:6379> hset user age 30
(integer) 1
127.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 18
OK
127.0.0.1:6379> hmget person age username
1) "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' command
127.0.0.1:6379> hexists killer a
(integer) 0
127.0.0.1:6379> hexists user username
(integer) 1
127.0.0.1:6379> hexists person age
(integer) 1
127.0.0.1:6379>

hdel删除对象字段

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "username"
2) "chen"
127.0.0.1:6379> hgetall person
1) "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) 1
127.0.0.1:6379> hlen person
(integer) 2
127.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) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379>

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

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

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

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

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

redis 127.0.0.1:6379> rpush mylist4 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist4 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist4 "three"
(integer) 3
redis 127.0.0.1:6379> lset mylist4 0 "four"
OK
redis 127.0.0.1:6379> lset mylist4 -2 "five" 倒数第二
OK
redis 127.0.0.1:6379> lrange mylist4 0 -1
1) "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) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 "hello"  从最上面开始删除两个hello元素
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0.1:6379>

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

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

count=0时,删除全部

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

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

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

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

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

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

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

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

redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
3) "hello"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "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 -1
1) "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) 2
redis 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