Redis之常用命令

Redis的配置文件中可以看到Redis中有多少个数据库,默认是16个

Redis命令

系统的一些命令

select 00-15,切换至0号库
DBSIZE:查看有多少key
keys *:将所有key罗列出来,支持ant分割的查询,例如下面一个
keys k?:将k开头的两位的key显示出
FLUSHDB:将当前库清空
FLUSHALL:将所有库清空
shutdown:关闭
exit:退出

公用命令

del key:删除key
dump key:序列化给定key,返回被序列化的值
keys pattern:查询所有符号给定模式的key eg:keys *
exists key:检查key是否存在
ttl key:返回key剩余时间,-1为永久,-2为失效,失效就相当于删除了
expire key second:为key设定过期时间,以秒计算,可以不写second,默认为秒
move key db:移动key至指定数据库中 eg:move a 1
type key:返回key所储存的值的类型
persist key:移除key的过期时间,key将持久保存
randomkey:随机返回一个key
rename key newkey:修改key的名称

String类型的命令

string类型是二进制安全的

二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全,也就是不会被篡改、破译;如果被攻击,能够及时检测出来

redis的string可以包含任何数据,如图像、序列化对象。一个键最多能存储512MB。

set key_name value:命令不区分大小写,但是key_name区分大小写,在key中设置value值,若已有该key,则覆盖
setnx key value:当key不存在时设置key的值。(SET if Not eXists)若已存在则不会改变原来的值
setex key_name 时间 value:创建一个key,并且设置他的过期时间
mset k1 v1 k2 v2 k3 v3:一次设置多个key
msetnx k1 v1 k2 v2 k3 v3:一次设置多个key,若只要有某个key已存在,则都不会执行成功
mget k1 k2 k3:一次获取多个key
get key_name:获取指定key的value值
del key_name:删除指定key
append key_value:字符串拼接,追加至末尾,如果不存在,为其赋值
strlen key:返回key所存储的字符串的长度
getrange key start end:获取key中字符串的子字符串,从start开始,end结束,end为-1,即到最未
setrange key offset value:设置从offset往后的值
mget key1 [key2 …]:获取多个key
getset key_name value:返回key的旧值,并设定key的值。当key不存在,返回nil
incr key_name :INCR命令key中存储的值+1,如果不存在key,则key中的值话先被初始化为0再加1,若为不能加的则执行不成功
incrby key_name 增量:以指定增量增加值
decr key_name:中的值自减一
decrby key_name 减量:以指定减量减少值

String应用场景:

1、String通常用于保存单个字符串或JSON字符串数据

2、因为String是二进制安全的,所以可以把保密要求高的图片文件内容作为字符串来存储

3、计数器:常规Key-Value缓存应用,如微博数、粉丝数。INCR本身就具有原子性特性,所以不会有线程安全问题

hash常用命令

Redis hash是一个string类型的field和value的映射表,Map<String,Object>
value是一个键值对

hash特别适用于存储对象。每个hash可以存储232-1(40亿左右)键值对。可以看成KEY和VALUE的MAP容器。相比于JSON,hash占用很少的内存空间。

hset key_name field value:为指定的key设定field和value
hmset key field value[field1,value1]:设置多个field的值
hsetnx key_name field value:当不存在才创建该field
hget key field:获取key的field键的值
hmget key field[field1]:获取多个field值
hgetall key:返回hash表中所有字段和值
hkeys key:获取hash表所有字段
hvals key:获取hash表所有值
hlen key:获取hash表中的字段数量
hdel key field [field1]:删除一个或多个hash表的字段
hexists key field:在key里面是否存在指定的field
hincrby key field increment:以增量increment增加某个field的值
hincrbyfloat key field increment:以增量小数increment增加某个field的值

Hash的应用场景,通常用来存储一个用户信息的对象数据

1、相比于存储对象的string类型的json串,json串修改单个属性需要将整个值取出来。而hash不需要。

2、相比于多个key-value存储对象,hash节省了很多内存空间

3、如果hash的属性值被删除完,那么hash的key也会被redis删除

Redis哈希槽

Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念。

Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 算法计算的结果,对 16384 取模后放到对应的编号在 0-16383 之间的哈希槽,集群的每个节点负责一部分哈希槽

list常用命令

类似于Java中的LinkedList。底层实际上是一个链表,单值单value

lpush key value1 [value2]:从左侧插入,右边的先出,相当于一个栈
    eg:lpush list 1 2 3   
       lrange list 0 -1 输出:3 2 1
rpush key value1 [value2]: 从右侧插入,左边的先出
    eg:rpush list 1 2 3 
       lrange list 0 -1 输出:1 2 3
lpushx key value:从左侧插入值,如果list不存在,则不操作
rpushx key value:从右侧插入值,如果list不存在,则不操作
lpop key :从左侧移除第一个元素
rpop key:移除列表最后一个元素
llen key:获取列表长度
lindex key index:获取指定索引的元素,从零开始
lrange key start stop:获取列表指定范围的元素
irem key 个数 元素值:删除指定个数的同一元素
    eg:irem list 2 3 删掉了集合中的两个三
ltrim key index index:截取指定范围的值,再赋值为key
rpoplpush 源列表 目的列表:源列表的最后一个元素放入目的列表的第一个元素
lset key index value :指定索引index的值
ltrim key start stop :对列表进行修改,让列表只保留指定区间的元素,不在指定区间的元素就会被删除
    eg:list1中元素1 2 3 4 5 ltrim list1 2 3 list1剩余元素:3 4
linsert key before/after world value:在列表元素world前或者后插入元素value
blpop key [key1] timeout:移除并获取列表第一个元素,如果列表没有元素会阻塞列表到等待超时或发现可弹出元素为止
brpop key [key1] timeout:移除并获取列表最后一个元素,如果列表没有元素会阻塞列表到等待超时或发现可弹出元素为止

应用场景

1、对数据大的集合数据删减
列表显示、关注列表、粉丝列表、留言评价…分页、热点新闻等

2、任务队列 list通常用来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样通过order by来排序

补充:

rpoplpush list1 list2 移除list1最后一个元素,并将该元素添加到list2并返回此元素 用此命令可以实现订单下单流程、用户系统登录注册短信等。

性能总结

它是一个字符串链表,left、right都可以插入添加;

如果键不存在,创建新的链表;

如果键已存在,新增内容;

如果值全移除,对应的键也就消失了。

链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

set

唯一、无序,单值多value

sadd key value1[value2]:向集合添加成员
scard key:返回集合成员数
smembers key:返回集合中所有成员
sismember key member:判断memeber元素是否是集合key成员的成员
srandmember key [count]:返回集合中一个或count个随机数
srem key member1 [member2]:移除集合中一个或多个成员
spop key:移除并返回集合中的一个随机元素
smove source destination member:将member元素从source集合移动到destination集合
sdiff source [source]:返回给定的第一个集合和其他集合的差集(即在前source 中的值而在后source 中找不到)
sdiffstore destination source [source]:返回给定的第一个集合与其他的集合的差集并存储在destination中
    eg:set1:1 2 3 set2:3 4 5 6 sdiffstore set3 set1 set2 smembers set3 result:1 2
sinter source [source]:返回所有集合的交集
sunion source [source]:返回所有集合的并集

对两个集合间的数据[计算]进行交集、并集、差集运算

1、以非常方便的实现如共同关注、共同喜好、二度好友等功能。对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存储到一个新的集合中。

2、利用唯一性,可以统计访问网站的所有独立 IP

zset

有序且不重复(成员唯一)
每个元素都会关联一个double类型的分数,Redis通过分数进行从小到大的排序。分数可以重复

zadd key score memeber [score memeber]:增加一个或多个member,分数为score
zcard key :获取集合中的元素数量
zcount key min max:计算在有序集合中指定区间分数的成员数
zcount key min max:计算在有序集合中指定区间分数的成员数
zrange key start stop:指定输出索引范围内的成员值
zrange key start stop withscores:指定输出索引范围内的成员值,带上分数
zrangebyscore key min max:指定输出score区间内的成员,带上(是不包含,例如(min
zrangebyscore key min max limit 个数:指定输出score区间内的成员,返回指定个数
zrank key member:返回有序集合指定成员的索引
zrevank key value值:作用是逆序获得下标值
zrevrange key start stop :返回有序集中指定区间内的成员,通过索引,分数从高到底
zrem key member [member …]:移除有序集合中的一个或多个成员
zremrangebyrank key start stop:移除有序集合中给定的索引区间的所有成员(第一名是0)(低到高排序)
zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员

使用场景

常用于排行榜:
如推特可以以发表时间作为score来存储
存储成绩
还可以用zset来做带权重的队列,让重要的任务先执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值