用心写好每一篇

Redis是一个K-V形式的一个非关系型数据库,一般用作于缓存,消息中心,数据库等。本篇文章对于其他的不做过多介绍,主要介绍redis的常用命令:

  • redis有着16个数据库,一般可以在redis.conf配置文件中查看,数据库与数据库之间互不影响,可以通过select命令进行一个切换,下标由0~15.

  • 通过DBSIZE命令可以查看当前数据库DB的大小

  • 通过keys +正则表达式 可以获得满足条件的key进行展示

  • 如果我们要对一个库进行清空我们可以使用flushdb命令,但是上面我们介绍了redis分为16个数据库,那如果16个我都要进行清空处理的化是不是一个一个的flushdb处理呢?当然不用,我们可以直接使用flushall命令


    简单聊下:Redis是从外面看是单线程的。但是由于它是基于内存操作的,所以它的读写速度十分的快,读的速度每秒11万,写的速度每秒8万,所以cpu并不是redis的操作瓶颈,对于redis而言,机器的内存大小和网络带宽才是对redis影响的一个数据。

  • exists命令:用于判断一个key是否存在,存在则返回1,不存在则返回0

  • move命令,和它的英文意思一样,用于移动一个key到指定的库

  • expire 和 ttl 命令,expire命令可以给一个key设置一个过期时间,默认单位为秒,通过ttl命令可以查看到一个key剩余时间,如果剩余时间为-1则代表这个key为永久

  • type key :用于查看当前key的一个类型

String类型常用命令

  1. set key value:设置一个key和一个value;

  2. get key :根据key获得value;

  3. append key “追加value”:给指定的key拼接一个字符串,如果这个key不存在,就相当于set一个key-value;

  4. strlen key:获取这个key的字符串长度;

  5. 当value的值为数字时,可以使用incr key(key值加1),decr(key值减1)

  6. incrby key 步长 :可以给key的value设置一次增加多少,decrby类似,一次减多少

  7. getrange key start end : 获取key的value从start到end长度的字符串值,下标从零开始,如果end的值为-1就是直接get这个key的value

  8. setrange key start value : 给key从某下标开始用value替换后面的值

  9. setex(set with expire) : set一个key并设置过期时间

  10. setnx(set if not exists):如果key不存在进行设置,存在则返回0(失败) 在分布式锁中经常使用

  11. mset key1 value1 key2 value2 : 用于批量设置key-value

  12. mget key1 key2:用于批量获得

  13. msetnx : setnx的一个增强版,可以批量设置,其中每一个key都会判断是否存在,要注意的是,如果有一个key设置失败,那么整个都会设置失败,可以将msetnx理解成一个原子操作。

  14. getset :先对key进行一个get操作,如果key不存在直接返回nil并设置这个key,如果存在则返回key的value值并将新的value覆盖之前那个。

有关List操作常用命令

简单介绍一下list的数据结构,可以看成一个队列,然后left可以看成头部,然后right可以看成尾部

  • lpush : 当key不存在的时候创建一个list类型的key-value,并在其头部添加元素可以添加一个或多个
  • rpush : 当key不存在的时候创建一个list类型的key-value,并在其尾部添加元素可以添加一个或多个
  • lrange : 可以联系getrange进行记忆,不过这里是取一定范围的元素,下标start也从0开始,然后end为-1时表示展示全部
127.0.0.1:6379> lpush mylist xiec zhangs  # 创建一个key为mylist的list结构的key-value ,并添加两个元素,先添加xiec,然后再zhangs,所以第一个元素为zhangs
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1 # 通过lrange进行查看,也可以看出第一个元素是zhangs
1) "zhangs"
2) "xiec"
127.0.0.1:6379> rpush mylist lisi # rpush 可以理解成再尾部添加一个元素,所以lisi再最后
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "zhangs"
2) "xiec"
3) "lisi"
  • lpop:移除最左(头部)的一个元素
  • rpop: 移除最右边(尾部)的一个元素
127.0.0.1:6379> lpush mylist hello1 # 通过lpush命令为key为mylist的增加三个元素
(integer) 1
127.0.0.1:6379> lpush mylist hello2
(integer) 2
127.0.0.1:6379> lpush mylist hello3
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1 #通过lrange进行查看
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> lpop mylist # 移除mylist中第一个元素(头部第一个)
"hello3"
127.0.0.1:6379> rpop mylist # 移除mylist尾部第一个元素
"hello1"
127.0.0.1:6379> lrange mylist 0 -1 # 再次通过lrange进行查看发现只剩一个
1) "hello2"
  • lindex: 通过指定的下标来获取元素,下标从0开始
127.0.0.1:6379> lrange mylist 0 -1   # 对mylist中元素进行查看
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6379> lindex mylist 2  #获取下标为2的list中的元素
"hello3"
  • llen : 返回list列表的长度
  • lrem: 移除list列表中的指定元素,可以一次移除多个
  • ltrim: 相当于剪辑,获取指定范围的list的元素,其他元素将被移除
127.0.0.1:6379> lrange mylist 0 -1  #查看mylist中的元素
1) "hello4"
2) "hello3"
3) "hello2"
4) "hello1"
127.0.0.1:6379> llen mylist  # 获取长度
(integer) 4
127.0.0.1:6379> lpush mylist hello1    # 为了测试lrem可以移除多个增加一个hello1,list是有序的,所以元素可以重复
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello4"
3) "hello3"
4) "hello2"
5) "hello1"
127.0.0.1:6379> lrem mylist 1 hello4   #移除mylist中值为hello4的元素,然后移除1个
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello3"
3) "hello2"
4) "hello1"
127.0.0.1:6379> lrem mylist 2 hello1  #移除mylist中值为hello1的元素,然后移除2个
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
127.0.0.1:6379> rpush mylist hello1   # 为测试方便增加一个元素
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> ltrim mylist 0 1  #对mylist中的元素进行截取,截取第0~1个
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
  • rpoplpush : 返回并移除list中的最后一个元素,并把该元素加入到一个新的list中
  • lset : 通过指定的下标为list设置一个值,类似于update,如果下标再list中不存在,或者list不存在都会报错
  • linsert : 给list再指定元素前或者后来插入一个元素
127.0.0.1:6379> lpush mylist hello1 hello2 hello3  #创建mylist并新增三个元素
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> rpoplpush mylist mylist1 # 将mylist中最后一个元素弹出,并增加到mylist1中,如果mylist1不存在则会创建
"hello1"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
127.0.0.1:6379> keys *
1) "mylist"
2) "mylist1"
127.0.0.1:6379> lrange mylist1 0 -1
1) "hello1"
127.0.0.1:6379> lset mylist 0 xiec  # 将下标为0的元素更新为xiec
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "xiec"
2) "hello2"
127.0.0.1:6379> linsert mylist before xiec lisi  # 再mylist中再元素值为xiec的前面增加一个lisi元素
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "lisi"
2) "xiec"
3) "hello2"

Set集合:set和list最主要的区别和java集合类似,里面的元素无序,并且不可以重复

  • sadd: 用于创建一个set类型的key-value 类型的键值对,并往里面增加一个或多个值
  • smembers : 查看一个set集合中的所有元素
  • sismember : 判断一个元素是否再set集合中,存在返回1,不存在返回0
  • scard : 获取set集合的长度
127.0.0.1:6379> sadd myset hello word xiec
(integer) 3
127.0.0.1:6379> smembers myset
1) "xiec"
2) "word"
3) "hello"
127.0.0.1:6379> sismember myset xiec
(integer) 1
127.0.0.1:6379> scard myset
(integer) 3
  • srem: 移除set集合中一个具体的元素
  • srandmember : 从set 集合中随机取出一个或多个值
  • spop : 随机从set集合中移除一个元素
  • smove : 从一个set集合中移动一个元素到另一个set集合中,如果另一个set集合不存在则会创建
127.0.0.1:6379> flushdb   #为演示先清空数据库
OK
127.0.0.1:6379> sadd myset hello word xiec happy
(integer) 4
127.0.0.1:6379> srem myset hello  # 从myset中移除值为hello的元素
(integer) 1
127.0.0.1:6379> smembers myset  #查看myset中的元素
1) "xiec"
2) "word"
3) "happy"
127.0.0.1:6379> srandmember myset  # 从myset集合中随机取出一个值,并不会从set集合中删除
"word"
127.0.0.1:6379> smembers myset
1) "xiec"
2) "word"
3) "happy"
127.0.0.1:6379> spop myset   # 从set集合中随机选取一个元素并删除
"xiec"
127.0.0.1:6379> smembers myset
1) "word"
2) "happy"
127.0.0.1:6379> smove myset myset1 word   # 将myset集合中的world元素移动到myset1中myset1不存在则会创建
(integer) 1
127.0.0.1:6379> keys *
1) "myset1"
2) "myset"
127.0.0.1:6379> smembers myset1
1) "word"
  • sdiff : 计算两个集合的差集
  • sinter : 计算两个集合的交集
  • sunion : 计算两个集合的并集
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd set1 a b c d
(integer) 4
127.0.0.1:6379> sadd set2 c d e f
(integer) 4
127.0.0.1:6379> sdiff set1 set2   # 差集,set1减去set2剩下的就是a,b
1) "b"
2) "a"
127.0.0.1:6379> sinter set1 set2  #交集,很容易理解,就是两个set集合的共同元素
1) "d"
2) "c"
127.0.0.1:6379> sunion set1 set2 #并集,就是把两个集合的所有元素
1) "f"
2) "b"
3) "e"
4) "a"
5) "d"
6) "c"

Hash:hash和String的命令很类似,可以联合记忆,hash的value是一个map集合。

  • hset :设置一个hash类型的key value
  • hget : 从hash的map中取出具体key的值
  • hmset : 和String类型的mset类似,这个可以批量设置map中的键值对
  • hmget : 同时获取多个map中多个key的value
127.0.0.1:6379> hset  myhash name xiec
(integer) 1
127.0.0.1:6379> hget myhash name
"xiec"
127.0.0.1:6379> hmset myhash age 23 sex nan
OK
127.0.0.1:6379> hmget myhash name age
1) "xiec"
2) "23"
  • hgetall : 获取一个hash中的全部元素,以key-value形式展示
  • hdel : 删除hash中的一个key,删除时value也会同步删除
  • hlen : 获取hash中有多少个key
127.0.0.1:6379> hset  myhash name xiec
(integer) 1
127.0.0.1:6379> hget myhash name
"xiec"
127.0.0.1:6379> hmset myhash age 23 sex nan
OK
127.0.0.1:6379> hmget myhash name age
1) "xiec"
2) "23"
127.0.0.1:6379> hgetall myhash
1) "name"
2) "xiec"
3) "age"
4) "23"
5) "sex"
6) "nan"
127.0.0.1:6379> hdel myhash sex
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "name"
2) "xiec"
3) "age"
4) "23"
127.0.0.1:6379> hlen myhash
(integer) 2
  • hexists : 判断hash中是否存在指定的key,存在返回1,不存在返回0
  • hkeys : 获取hash中所有的key(只有key)
  • hvals : 获取hash中多有的value(只获得所有的value)
127.0.0.1:6379> hgetall myhash
1) "name"
2) "xiec"
3) "age"
4) "23"
127.0.0.1:6379> hexists myhash name
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "name"
2) "age"
127.0.0.1:6379> hvals myhash
1) "xiec"
2) "23"
  • hincrby : 为hash中的某个key的value指定增加多少
  • hsetnx : 只有当hash中的那个key不存在时才会设置成功
127.0.0.1:6379> hgetall myhash
1) "name"
2) "xiec"
3) "age"
4) "23"
127.0.0.1:6379> hincrby myhash age 2
(integer) 25
127.0.0.1:6379> hsetnx myhash sex nan
(integer) 1
127.0.0.1:6379> hsetnx myhash sex nv
(integer) 0

Zset集合:这个集合类型和Set集合很像,命令也大多类似,相比而言Zset多了score用来排序得字段

  • zadd :可以设置一个zset类型得键值对,可以一次为zset集合添加一个或多个值
  • zrange:用于查看set集合中得元素
  • zrangebyscore: 通过score字段排序 -inf表示无穷小,+inf表示无穷大
127.0.0.1:6379> zadd myset 10 xiec 20 zhangs 30 lisi  # 其中10,20,30表示score 字段
(integer) 3
127.0.0.1:6379> zrange myset 0 -1  # 查看set集合中全部元素
1) "xiec"
2) "zhangs"
3) "lisi"
127.0.0.1:6379> zrangebyscore myset -inf +inf  # 通过score 字段从小到大排序,不展示score
1) "xiec"
2) "zhangs"
3) "lisi"
127.0.0.1:6379> zrangebyscore myset -inf +inf withscores  # 加上withscores对score进行展示
1) "xiec"
2) "10"
3) "zhangs"
4) "20"
5) "lisi"
6) "30"
  • zrem : 删除zset集合中得具体元素
  • zcard :获取zset集合得长度
  • zrevrange: 从大到小对zset进行一个排序
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd myset 10 xiec 20 zhangs 30 lisi
(integer) 3
127.0.0.1:6379> zrange myset 0  -1
1) "xiec"
2) "zhangs"
3) "lisi"
127.0.0.1:6379> zrem myset lisi   # 删除zset集合中值为lisi得元素
(integer) 1
127.0.0.1:6379> zrange myset 0 -1
1) "xiec"
2) "zhangs"
127.0.0.1:6379> zcard myset  #查看zset集合中的长度
(integer) 2
127.0.0.1:6379> zrevrange myset +inf -inf  # 要注意的是 这里从大到小不能用 +inf和-inf
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zrevrange myset 40 -inf
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zrevrange myset 0 -1   # 用0到-1进行表示
1) "zhangs"
2) "xiec"
127.0.0.1:6379> zrevrange myset 0 -1 withscores
1) "zhangs"
2) "20"
3) "xiec"
4) "10"

redis五种常用类型介绍到此,下篇会对geospatial,hyperloglog,bitmap,常用命令和使用进行简单介绍,喜欢的可以进行关注

Redis常用命令总结相关推荐

  1. Redis常用命令集

    Redis常用命令集 1)连接操作命令 quit:关闭连接(connection) auth:简单密码认证 help cmd: 查看cmd帮助,例如:help quit 2)持久化 save:将数据同 ...

  2. Redis常用命令之操作Hash类型

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  3. Redis —— 常用命令一览

    引言 参考<菜鸟教程 Redis 常用命令>,其中红色为极其重要,蓝色为重要. 一.总览 二.key相关命令 三.String 相关命令 四.Hash 相关命令 五.List 相关命令 六 ...

  4. redis常用命令:

    redis常用命令: 一 .键值相关命令: key:取出当前数据库中的所有key: keys *   //全匹配 keys  my* //模糊匹配 exists : 确认一个key是否存在,返回值1存 ...

  5. 查看redis常用命令

    Redis常用命令 一. Connection连接 ping 使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 案例: 测试ping quit 请求服 ...

  6. 八股文之linux中redis常用命令

    全局操作 查询键 # 查询所有的键,遍历所有的键 keys * 127.0.0.1:6379> keys * "backup4" "backup3" &q ...

  7. redis常用命令个人总结

    一.前言 有时会碰到些运维问题,除了需要手动修改数据库外,还需要手动修改redis. 下方总结下redis常用命令. 二.redis常用命令 1.登录redis服务器后,执行命令登录redis: re ...

  8. Redis 常用命令的学习

    Redis 常用命令的学习 文章目录 Redis 常用命令的学习 1. 介绍 2. Redis 的五种数据类型以及操作命令 1. 连接 2. Redis的key的操作命令 3.字符串类型:string ...

  9. Redis常用命令|查询|删除|模糊操作

    Redis中有很多操作命令,今天就给大家整理一下,或许不够全面,欢迎留言沟通. redis常用命令 作用 命令 描述 查看所有key keys * 模糊匹配key keys xxx* | keys * ...

  10. [redis] Redis 常用命令

    redis 五种数据类型的使用场景 浅谈 Redis 数据库的键值设计 redis命令文档: http://doc.redisfans.com/index.html 1. redis查看当前所有的ke ...

最新文章

  1. C#BindingSource用法、属性、事件
  2. 如何在windows系统上安装ubuntu双系统
  3. 风控建模中的样本偏差与拒绝推断
  4. VC++打开、保存文件对话框和浏览文件夹对话框
  5. 软件项目周报_软件产品研发流程
  6. DataGrid与GridView中删除前提示框与编辑框长度设置的实现(ASP.NET)
  7. [基础篇]PHP引用变量
  8. addEventListener:为单个事件注册多个事件事件处理程序
  9. ASCII码表以及字符和数字转换
  10. Android 文字转语音之TextToSpeech
  11. 【无人驾驶系列一】激光雷达(LiDAR)在无人驾驶技术中的应用
  12. Mugeda(木疙瘩)H5案例课—模拟朋友圈-岑远科-专题视频课程
  13. STM32采用串口DMA方式,发送数据
  14. 汽车环视算法原理及其实现
  15. php论坛mybb,MyBB
  16. 常用db与倍数的关系
  17. 如何写好状态机?跑马灯/流水灯Verilog HDL实现
  18. 电力系统中的定值区是什么意思
  19. 为Linux安置红旗紫光输入法
  20. 解救小哈(dfs)-->改编自《啊哈!算法》

热门文章

  1. 小程序如何生成海报分享朋友圈
  2. NideShop:基于Node.js+MySQL开发的高仿网易严选开源B2C商城
  3. Android使用NanoHttpd在app内搭建https server(二)
  4. graphic头文件函数_C语言图形函数库总结graphics.h
  5. 华为交换之间静态路由配置实例
  6. 【光学】(杨氏双缝+劈尖)干涉+(单缝+多缝+圆孔+矩孔)衍射仿真matlab源码含GUI
  7. 2022年智能电梯行业研究报告
  8. ScreenCapture
  9. 一键清理C盘垃圾文件,让你的电脑运行飞起
  10. 人工智能导论期末复习题