redis五种数据结构的操作命令

基础知识

1)、测试redis服务的性能:redis-benchmark

2)、查看redis服务是否正常运行:

ping如果正常---pong..

3)、查看redis服务器的统计信息: info查看redis服务的所有统计信息 info [信息段]查看redis服务器的指定的统计信息,如: info Replication 4)、redis的数据库实例:作用类似于mysql的数据库实例,redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例;默认情况卞,redis会自动创建16个数据库实例,并且给这些数据库实例进行编号,从O开始,一直到15,使用时通过编号来使用数据库;可以通过配置文件,指定redis自动创建的数据库个数;redis的每一个数据库实例本身占用的存储空间是很少的,所以也不造成存储空间的太多浪费。默认情况下,redis客户端连接的是编号是0的数据库实例;可以使用select index切换数据库实例。

5)、查看当前数据库实例中所有key的数量: dbsize 6)、查看当前数据库实例中所有的key: keys * 7)、清空数据库实例:flushdb 8)、清空所有的数据库实例:flushall 9)、查看redis中所有的配置信息: config get * 查看redis中的指定的配置信息:config get parameter

五大数据结构

程序是用来处理数据的,存到数据库中

  1. 字符串(string):zhang 200 string 单key:单value username:zhangsan

  2. 列表(list):[17803499947 1767732958@qq.com 3123123] list 单key:多value(有序) contarst:178,123,123,543

  3. 集合(set):[北京 天津 上海 广州 ] set 单key:多value(无序) city: beij shangh tianj

  4. 哈希表 (字典)(hash): hash 单key:对象(属性:值) student:id1001,name:zha

  5. 有序集合(zset): zset 单key:多value(有序) city:2000 bj ,19999 sh

list和放的顺序有关系,zset和放的顺序无关,和参考值有关系

key值

  1. redis 中key 的操作命令

    1. keys pattern 满足通配符的命令

      1、* 表示统配0-n个字符串 : keys * 查看redis所有的数据 keys k* 以k开头的数据

      2、?表示对应一个字符 : keys k? 查看两个字符第一个是k的key值

      3、[] 匹配[]中的一个字符 : keys h[abc]llo 以 h 开头 llo 结尾,并且中间字符是abc中的1个的key

  2. 判断是否存在某key exists

    规则 操作命令 解释 判断是否存在某个key exists key 返回值:1存在0不存在 判断是否存在多个key exists key1 key2 … 返回值为存在key的数量

  3. 查看指定key的剩余生存时间 ttl

    规则 操作命令 解释 查看指定key的剩余生存时间 ttl key 返回值:-2 key不存在,-1 未设置生存时间

  4. 设置key的最大生存时间 expire

    规则 操作命令 解释 设置key的最大生存时间 expire key 20 时间单位为秒 如果不存在就返回0

  5. 查看key的数据类型 type

    规则 操作命令 解释 查看key的数据类型 type key string/list

  6. 重命名key rename

    规则 操作命令 解释 重命名key rename key newKey

  7. 删除key del

    规则 操作命令 解释 删除key del key1 key2 … 返回值为删除key的数量

  8. 移动key到指定数据库 move

    move k 1

string

  1. 将string保存到redis 中 set

    如果存在,那么覆盖 srtnx 这个命令,如果key存在就不添加了

    set key value

  2. 获取string get

    get key

  3. 追加字符串 append key value

    append ip 9999 返回追加之后的字符串的长度

    如果key不存在就相当于set命令

  4. 获取key对应的value的长度 strlen key

    返回value 的长度

  5. 将key中储存则数字值增1 incr key

    如果key 不存在,那么先初始化key 为 0 然后incr 变成1 incr k1 v1 (k1 不存在) k1 1

    如果key 存在但是是一个字符串,那么就报错 ERR value is not an integer or out of range

  6. 将key中储存的数字值减1 decr key (基本同上)

  7. 将key中储存的数字值增增。自定义步长 incrby key 步长

  8. 将key中储存的数字值增减。自定义步长 decrby key 步长

    decrby age 20 加20 so easy

  9. 可以同时设置多组键值对 mset key1 value1 key2 value2 ........

    mset k1 v1 k2 v2 k3 v3 mget k1 k2 k3 得: v1 v2 v3

  10. 可以同时一个或多个key的value值 mget key1 key2 key3 ....

  11. 同时设置多组键值对 msetnx key1 value1 key2 value2 .....

    同时设置多组键值对,当且仅当所有给定的key都不存在时,才能设置成功原子性,有一个失败,则都失败

  12. 可以获取1个或多个键值对 mgetnx key1 key2 key3

  13. 子字符串操作

    1. setrange key 起始位置 字符串 初始hello 命令 setrange 3 asd 结果 helasd 把3后面得三个字符重写(覆盖子字符串)如果是空,就是起始位置之前的char用\x00来表示,新增一个key

    2. getrange key 起始位置(最小0) 结束位置(string.size()-1) 和数组一样 下标从0开始 getrange key 0 3 得:hela 闭区间截取 不影响redis得存储,只是单纯的取出来 下标可以是负数,和python差不多,最后一个字符是-1 ,然后自右向左,减一,-3 -1 就是取最后三个char

  14. setex key second value

    设置时候指定存在时长

  15. getset key value

    返回旧值,设置新值 相当于先get 然后set

前缀m表示批量 后缀ex 表示设置时长 nx 表示key不可以重复

list

  1. 下标和getreange 一样的,放入顺序是下标顺序,可以把 List 想象成一根管道。

img

  1. lpush (list push )

    将一个或者多个值依次插入到列表的表头(列表的最左侧)

    lpush key value1 value2 value3 value4 ...........

    127.0.0.1:6379> lpush list1 beij tianj shangh   $shangh  3   tianj  2  beij  1 
    (integer) 3
    127.0.0.1:6379> keys * 
    1) "list1"
  2. lrange

    查看list内容 等于getrange

    lrange key start stop (如果想看全部的就是0,-1)

    127.0.0.1:6379> lrange list1 0 -1 
    1) "shangh"
    2) "tianj"
    3) "beij"
    127.0.0.1:6379> 
  3. rpush

    lpush 是在表头插入,rpush是在表尾插入

  4. lpop

    左端删除,返回删除值

  5. rpop

    右端删除,返回删除值

  6. del

    全部删除

  7. llen

    list 长度

  8. lindex

    获取index 的值 lindex key index

    127.0.0.1:6379> lpush list2 1 2 3 4 5 
    (integer) 5
    127.0.0.1:6379> rpush list3 1 2 3 4 5 
    (integer) 5
    127.0.0.1:6379> lrange list2 0 -1 
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> lrange list3 0 -1 
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> lpop list2 
    "5"
    127.0.0.1:6379> lrange list2 0 -1 
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379> rpop list3 
    "5"
    127.0.0.1:6379> lrange list3 0 -1 
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> del list2 
    (integer) 1
    127.0.0.1:6379> lrange list2 0 -1 
    (empty array)
    127.0.0.1:6379> llen list3 
    (integer) 4
    127.0.0.1:6379> lrange list3 0 -1 
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> lindex list3 2
    "3"      //这个下标应该是从0开始,上面显示的是从1开始
  9. lrem

    lrem key count value

    根据count 值移除指定列表中和value相等的数据:

    count > 0 : 从列表左侧移除count个和value 相同的元素

    count < 0 : 从列表右侧移除count个和value 相同的元素

    count = 0 :从列表中删除和value相等的元素

    127.0.0.1:6379> lpush list4 a a b c a d e a b b 
    (integer) 10
    127.0.0.1:6379> lrange list4 0 -1 
     1) "b"
     2) "b"
     3) "a"
     4) "e"
     5) "d"
     6) "a"
     7) "c"
     8) "b"
     9) "a"
    10) "a"
    127.0.0.1:6379> lrem list4 2 b 
    (integer) 2
    127.0.0.1:6379> lrange list4 0 -1 
    1) "a"
    2) "e"
    3) "d"
    4) "a"
    5) "c"
    6) "b"
    7) "a"
    8) "a"
    127.0.0.1:6379> lrem list4 1 a 
    (integer) 1
    127.0.0.1:6379> lrem list4 -2 a 
    (integer) 2
    127.0.0.1:6379> lrange list4 0 -1 
    1) "e"
    2) "d"
    3) "a"
    4) "c"
    5) "b"
    127.0.0.1:6379>

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

set

  1. 无序但是不能重复,一个kye 对应多个value,无序而且不能重复 ,底层是底层是 HashTable

  2. 存放元素和读取元素

    读取元素:smembers sismember scard srandmember

    127.0.0.1:6379> sadd set1 a a b b c c 
    (integer) 3
    127.0.0.1:6379> smembers set1 
    1) "a"
    2) "c"
    3) "b"
    127.0.0.1:6379> 
  3. 增删查

    增加:sadd

    删除:srem spop (spop key [count] 随机删除几个) smove()

    127.0.0.1:6379> sadd set1 d       #增加
    (integer) 1
    127.0.0.1:6379> smembers set1
    1) "a"
    2) "c"
    3) "d"
    4) "b"
    127.0.0.1:6379> sismember set1 a   #在不在集合中
    (integer) 1
    127.0.0.1:6379> sismember set1 e
    (integer) 0
    127.0.0.1:6379> srem set1 a      #删除   #不成功就被忽略
    (integer) 1
    127.0.0.1:6379> smembers set1 
    1) "c"
    2) "d"
    3) "b"
    127.0.0.1:6379> scard set1    #有多少元素
    (integer) 3
    127.0.0.1:6379> srandmember set1 2   # 随机取count个数据
    1) "c"
    2) "b"
    127.0.0.1:6379> spop set1 2
    1) "d"
    2) "b"
    127.0.0.1:6379> smembers set1
    1) "c"
    127.0.0.1:6379> sadd set1 a b c d e f  
    (integer) 5
    127.0.0.1:6379> sadd set2 k
    (integer) 1
    127.0.0.1:6379> smembers set1 
    1) "c"
    2) "d"
    3) "b"
    4) "a"
    5) "e"
    6) "f"
    127.0.0.1:6379> smembers set2 
    1) "k"
    127.0.0.1:6379> smove set1 set2 a    #smove source(源集合) destination(目标集合) member 
    (integer) 1
    127.0.0.1:6379> smembers set1 
    1) "d"
    2) "b"
    3) "c"
    4) "e"
    5) "f"
    127.0.0.1:6379> smembers set2 
    1) "a"
    2) "k"
  4. 集合的交并差运算

    交集:

    sinter key1 key2 key3 ..... 找到这几个集合中的相同元素

    sinterstore destination key1 key2 key3 ..... 找到的元素存储起来

    并集:

    sunion key1 key2 key3 找到这几个集合的全部元素

    sunionstore destination key1 key2 key3 存储起来

    差集:

    sdiff 获取一个集合中有,但是其他集合没有的元素组成一个新集合

    sdiff key1 key2 key3 (集合key1 中有但是key2 key3 中没有)

    sdiffstore destination key1 key2 key3 存储到destination

    #交集
    127.0.0.1:6379> flushdb 
    OK
    127.0.0.1:6379> keys * 
    (empty array)
    127.0.0.1:6379> sadd set1 a b c d e f
    (integer) 6
    127.0.0.1:6379> sadd set2 a b c 
    (integer) 3
    127.0.0.1:6379> sadd set3 c d e f
    (integer) 4
    127.0.0.1:6379> sinter set1 set2 set3
    1) "c"
    127.0.0.1:6379> sinter set4 set1 set2 set3 
    (empty array)
    127.0.0.1:6379> sinterstore set4 set1 set2 set3 
    (integer) 1
    127.0.0.1:6379> smembers set4
    1) "c"
    #并集
    127.0.0.1:6379> flushdb 
    OK
    127.0.0.1:6379> sadd set1 a b c 
    (integer) 3
    127.0.0.1:6379> sadd set2 a b d 
    (integer) 3
    127.0.0.1:6379> sadd set3 c d e
    (integer) 3
    127.0.0.1:6379> sunion set1 set2 set3 
    1) "c"
    2) "b"
    3) "d"
    4) "a"
    5) "e"
    127.0.0.1:6379> sunionstore set4  set1 set2 set3 
    (integer) 5
    127.0.0.1:6379> smembers set4 
    1) "c"
    2) "b"
    3) "d"
    4) "a"
    5) "e"
    #差集
    127.0.0.1:6379> sadd set3 a b c d e f 
    (integer) 6
    127.0.0.1:6379> sadd set4 a b c 
    (integer) 3
    127.0.0.1:6379> add set5 d e ad
    (error) ERR unknown command `add`, with args beginning with: `set5`, `d`, `e`, `ad`, 
    127.0.0.1:6379> sadd set5 d e ad
    (integer) 3
    127.0.0.1:6379> sdiff set3 set4 set5               #不存储
    1) "f"
    127.0.0.1:6379> sdiffstore set6 set3 set4 set5     #存储
    (integer) 1
    127.0.0.1:6379> smembers set6
    1) "f"

hash

  1. 单key : field -vaule field -vaule field -vaule field -vaule field -vaule field -vaule (多个)

    Redis [hash] 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象

    Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

  2. 存取数据

    存取:

    hset key field1 value1 [field1 value1]

    hmset key field1 value1 [field1 value1] (其实一样的,没鸡毛差距)

    hsetnx key field value 如果field-value 不存在,就设置(返回1),存在,放弃设置(没有例子,返回0)

    获取:

    hgetall key

    hget key field

    hmget key field [field.....]

    进阶版获取(没有这个名词):

    hlen key

    hkeys key

    hvals key

    删除:

    hdel key field [field......]

    存在:

    hexists key field 存在1 不存在0

    增加:

    hincrby key field int

    hincrbyfloat key field float

    127.0.0.1:6379> flushall 
    OK
    127.0.0.1:6379> hset hash1 name zhangsan age 20 sex nan
    (integer) 3
    127.0.0.1:6379> hget hash1 name 
    "zhangsan"
    127.0.0.1:6379> hget hash1 age 
    "20"
    127.0.0.1:6379> hget hash1 sex
    "nan"
    127.0.0.1:6379> hmget hash1 age sex 
    1) "20"
    2) "nan"
    127.0.0.1:6379> hgetall hash1
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "20"
    5) "sex"
    6) "nan"
    127.0.0.1:6379> hlen hash1
    (integer) 3
    127.0.0.1:6379> hkeys hash1
    1) "name"
    2) "age"
    3) "sex"
    127.0.0.1:6379> hvals hash1
    1) "zhangsan"
    2) "20"
    3) "nan"
    127.0.0.1:6379> hdel hash1 name 
    (integer) 1
    127.0.0.1:6379> hkeys hash1
    1) "age"
    2) "sex"
    127.0.0.1:6379> hexists hash1 age 
    (integer) 1
    127.0.0.1:6379> hexists hash1 name 
    (integer) 0
    127.0.0.1:6379> hget hash1 age 
    "20"
    127.0.0.1:6379> hincrby hash1 age 4
    (integer) 24
    127.0.0.1:6379> hget hash1 age 
    "24"
    127.0.0.1:6379> hincrbyfloat hash1 age 0.5
    "24.5"
    127.0.0.1:6379> hget hash1 age 
    "24.5"

zset

zset 通常包含 3 个 关键字操作:

  • key (与我们 redis 通常操作的 key value 中的key 一致)

  • score (排序的分数,该分数是有序集合的关键,可以是双精度或者是整数)

  • member (指我们传入的 obj,与 key value 中的 value 一致)

每个元素的分数可以重合,但是元素不能重合(本质上就是set)

  1. 存取数据(从小到大加了rev就是从大到小)

    1. 添加数据

      • zadd key score member [score member] (score是数值类型)

    2. 获取元素

      • 根据指令下标 zrange key startindex stopindex [withscores]

      • 根据分数区间 zrangebyscore key minscore maxscore [withscores]

    3. 删除元素

      • zrem key member [member]

    4. 获取member个数

      • zcard key

    5. 获取指定元素的排名

      • zrank key member (其实返回的是下标,排名从0开始的!!!)(从小到大

      • zrevrank key member (从大到小,排名从0开始 !)

    6. 某个分数区间的个数

      • zcount key minscore maxscore

    7. 指定元素查分数

      • zscore key member

127.0.0.1:6379> zadd zset 20 zhangsan 21 lisi 22 wangwu
(integer) 3
127.0.0.1:6379> zrange zset 0 -1 
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> zadd zset 19 zhaoliu
(integer) 1
127.0.0.1:6379> zrange zset 0 -1    #按照分数排序
1) "zhaoliu"
2) "zhangsan"
3) "lisi"
4) "wangwu"
127.0.0.1:6379> zadd zset 23 zhaoliu
(integer) 0
127.0.0.1:6379> zrange zset 0 -1 
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "zhaoliu"         #zhaoliu的score改变了
127.0.0.1:6379> zrangebyscore zset 22 23   ##根据score来查询
1) "wangwu"
2) "zhaoliu"
127.0.0.1:6379> zrangebyscore zset 22 23 WITHSCORES    #带上score
1) "wangwu"
2) "22"
3) "zhaoliu"
4) "23"
127.0.0.1:6379> zcard zset    #查看有多少个元素
(integer) 4
127.0.0.1:6379> zrank zset lisi
(integer) 1
127.0.0.1:6379> zcount zset 21 23
(integer) 3
127.0.0.1:6379> ZSCORE zset zhaoliu
"23"
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值