zoukankan      html  css  js  c++  java
  • Redis基本命令

    引言:

      在前一篇文章中,提到Redis键值对的存储方式支持多种数据类型的存储:key-----vlaue(String类型、set类型、list类型、hash类型、zset类型)

    key1     String类型的数据
    key2     set类型的数据,特点:无序、不可重复
    key3 list类型的数据,特点:有序、可重复
    key4 hash类型的数据,特点:相当于在value里又存了一个map,存放键值对维护的数据,当然了,这个作为value的map的value还可以存放map
    key5 zset类型的数据,特点:有序的set、不可重复



    一、关于key的命令

      redis-server /myredis/redis.conf:后台启动Redis服务

      redis-cli:打开redis客户端

      

      ①、查询、删除key

      

      ②、key的保质期

      

      ③、查看key的数量、清空数据库

      

      如果不小心删除了公司里的缓存数据库可咋整?跑路吗?其实通过持久化的一些操作可以恢复

    二、五大数据类型之String

      String类型极其重要,因为在日常工作中,操作的数据类型百分之七八十都是String类型。你可能会产生疑问?String只能存字符串并且日常工作中基本都是字符串,那视频图片文件怎么存呢?这里就要提一提String的二进制安全问题:这意味着你可将图片或者视频等文件序列化成二进制文件保存在value串中,然后通过反序列化取出来正常使用,很神奇吧,但这也是有限制的:一个Redis的字符串value最多可以是512M。

      基本命令:

      

      得益于Redis的单线程,redis的但命令是原子性的,比如这里的incr 和decr ,这不同于java中的i++和i--在java中分为取值,操作,赋值三步,而这三步在多线程情况下是有可能被打断的。

      批量添加获取命令:

      1、mset  key1  value1  k2  value2....:同时设置以一个或多个key-value对

      2、mget  key1  key2...:同时获取一个或多个value

      3、msetnx  key1  value1  k2  value2....同时设置一个或多个key-value对,当且仅当所有给抵挡的key都不存在。如果设置的键值对有的存在,有的不存在,那么命令就会执行失败,原因在于命令的原子性,要成功都成功,要失败都失败。

      4、getrange key 起始位置 结束位置:用于获取指定范围内的值,类似于java中的substring方法,但也是有点区别的,java中左闭右开,这里都是闭区间。

      

      5、setrange  key  起始位置  value :用指定的value复写key所存储的字符串值,从起始位置开始写。

      

      6、setex  key  过期时间 value:设置键值对同时指定过期时间,单位为秒:setex  k7 60 v7

      但是在较新的版本中,set命令后面还可以跟别的命令。这个可以用XShell后面的提示看出来:

      

      7、getset key  value :以旧换新,设置新值的同时获得旧值,看命令就能直白理解:先get再set

      

      

    三、五大数据类型之List

      Redis通过List实现了单键多值,Redis列表是简单的字符串列表,按照插入顺序,你可以添加一个元素到表的头部或者尾部。他的底层实际上是一个双向链表,对两端的操作性能很高,但是通过索引下标操作中间的节点性能会比较差。

      

      1、lpush/rpush  key  value1  value2  vlaue3  vlaue4  ......:从左边/右边插入一个或多个值。

      

      如果不知道list的长度,可以使用  lrange  l1  0  -1  来表示全查询。

      2、lpop/rpop  key :从左边或者右边pop出一个值

      

      3、rpoplpush  key1  key2 : 从key1列表的右边pop出一个值,插到key2列表的左边

      

      4、获取list元素和长度、插入删除

      lrange  key  startindex  stopindex:获取指定范围内的元素

      lindex  key  index:获取指定索引的元素

      llen key : 获取列表的长度

      linsert  key  before  value  newvalue :就value值前面插入一个新值newvalue。当有多个相同的值时,只往从左向右第一个value前插入一个newvalue

      

      lrem  key  n  value :从左边删除n个value

      

    四、五大数据类型之set

      Redis的set对外提供的功能与list类似,是一个列表的功能,其特殊之处在于,list中保存的数据是按照插入顺序排放的,但是set会对插入的数据进行重新排序,导致与插入的顺序不一致。当你希望存储一个列表数据,又不希望出现重复数据时,可以选择使用set。而且set提供了判断某个成员是否在set中的重要接口,这是list所没有功能。

      Redis的set是String类型的无序集合,他底层是一个value为null的hash表,所以添加、删除、查找的时间复杂度都是O(1)。

      1)sadd  key  value1  value2 ...

      将一个或多个member元素加入到几个key中,没加入一个元素都会计算hash值,并与以保存的数据进行比较,当两者的hash值进行比较,如果相同,则不添加。

      2)smembers  key

      取出该集合中所有的值

      3)sismember  key  value 

      判断集合key中是否含有指定的value值,有则返回1,无则返回0.

      4)scard  key

      返回该集合中元素的个数

      5)srem key  value1  value2...

      删除集合中指定的一个或多个元素

      6)spop  key 

      随机从该集合中pop出一个元素

      7)srandmember  key  n

      随机从该集合中读出n个元素【不会删除读出的元素】

      8)sinter  key1  key2...

      返回多个集合的交集元素

      9)sunion  key1  key2...

      返回多个集合的并集元素

      10)sdiff  key1  key2...

      返回多个集合的差集元素,但是他这个差集只取放在前面的key的差集元素:

      

    五、五大数据类型之hash

      在前面提到:作为Redis的键值对的value的hash类型的值,本身也是一个键值对集合,给人一种多维数据的感觉。hash是一个String类型的field和value的映射表,哈市特别适合存储对象,类似于java中的Map<String,Object>.

    0101  hash   
    0202  hash  

    ------------------------------------------------------------->

    name zhangsan
    age 24
    sex male

      

      1)hset  key  field  value :给key中field键赋值value

        

      2)hget  key  field :从key集合中取出filed属性的值

        

      3)hmset  key  field1  value1  field2  value2...... :批量设置hash的值

        hmset  0202  name  lisi  age  23  sex female

      4)hexists  key  field :判断哈希表key中,给定域field是否存在

      5)hkeys  key :列出该hash表中所有的field

      6)hvals  key :列出该hash表中所有的值

      7)hincrby  key  field  increment :为指定hash表中的指定filed加上增量increment,前提是此field的value是数zi

        

      8)hsetnx  key  filed  value :为指定hash表添加指定field和指定的value,同理当所指定的field已经存在时,操作失败!

    六、五大数据类型之zset(sorted  set)

      Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每一个成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。

      因为元素时有序的,所以你可以很快的根据评分或者次序来获取一个范围内的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的是能列表。

      1)zadd  key  score1  va score2 v2...... :将一个或多个member元素及其score值加入到有序可以中。

      2)zrange  key  start  stop  [withscores]

        返回有序集key中,下标在start ~ stop之间的元素,带上withscores,可以让分数一起和值返回到结果集中。

      

      3)zrangebyscore key min max withscores limit offset count

      返回有序集key中,所有score值介于min和max之间(包括等于min或者max的)的成员。有序集成员按照score值递增(从小到大)次序排列。

      

      4)zrevrangebyscore key max min withscores limit  offset  count

       原理同上,改为从大到小排列

      5)zincrby  key  increment  value :为指定成员value的score加上增量

       

      6)zrem  key  value  :删除指定集合下,指定的元素

       

      7)zrem  key  min  max  :统计指定集合中分数在指定区间内的元素个数

       

      8)zrank  key  value :返回该值在集合中的排名,排名从0开始

       

       案例:给文章访问量排名

       

  • 相关阅读:
    如何编辑SDE数据(转)
    常用sql语句
    JavaScript 实现地图打印
    什么是3G通信?
    一种客户端得到后台某个值的方法
    如何利用C#创建和调用DLL(转)
    C#中如何调用动态链接库DLL(转)
    一个ADF Javascript 添加鼠标移动事件的例子
    ArcGIS Server网站发布后地图显示空白的原因
    硬盘录像机监听按钮不起作用
  • 原文地址:https://www.cnblogs.com/superlsj/p/11617625.html
Copyright © 2011-2022 走看看