基础知识

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 想象成一根管道。

  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"

redis五种数据结构的操作命令相关推荐

  1. Redis五种数据结构

    对redis来说,所有的key(键)都是字符串,所谓的5种数据结构是指针对value而言 1.Redis五种数据结构如下: 数据结构类型 说明 使用场景 常用方法 其他链接 String字符串类型 1 ...

  2. Redis五种数据结构应用场景

    文章目录 前言 二.字符串String 2.1.常用操作 2.2.应用场景 2.2.1.单值缓存(最常用) 2.2.2.对象缓存 2.2.3.分布式锁 2.2.4.计数器 三.哈希hash 3.1.常 ...

  3. 字符动图_图解redis五种数据结构底层实现(动图哦)

    redis有五种基本数据结构:字符串.hash.set.zset.list.但是你知道构成这五种结构的底层数据结构是怎样的吗?今天我们来花费五分钟的时间了解一下.(目前redis版本为3.0.6) 动 ...

  4. 真正说透Redis五种数据结构

    系列文章目录 真正说透Redis五种数据结构 Redis持久化之RDB+AOF+混合持久化实战演练 Redis高可用之主从架构 文章目录 系列文章目录 前言 一.5种基本数据结构 二.字符串Strin ...

  5. 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)

    上一篇分享的是<深入理解JVM>,这篇给大家分享<Redis 五种数据结构以及三种高级数据结构解析>. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis ...

  6. Redis五种数据结构及其使用场景

    Redis五种数据结构及其使用场景 先有个概念,redis 数据库其实就是一个大的 map,它容纳了所有的 key, key 都是 string 类型,而 value 则有 string, list, ...

  7. 图解redis五种数据结构底层实现

    redis有五种基本数据结构:字符串.hash.set.zset.list.但是你知道构成这五种结构的底层数据结构是怎样的吗?今天我们来花费五分钟的时间了解一下.(目前redis版本为3.0.6) 动 ...

  8. 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。

    本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...

  9. Redis五种数据结构详解

    Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. Redis的五种数据结构包括以下五种: String:字符串类型 List ...

最新文章

  1. 2022-2028年中国无滴消雾大棚膜行业市场研究及前瞻分析报告
  2. python 调用api上传物流信息,python实现快递鸟API物流查询接口 数据签名方法
  3. tensorflwo-gpu win10_64bit 的安装版本问题
  4. Linux的cmake3的安装 cmake3编译安装成功了的 yum对于cmake3表示成功但实际没成功
  5. github/gitlab同时管理多个ssh key
  6. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
  7. Jconsole查看Weblogic自定义MBean
  8. all方法 手写promise_promise.all的实现
  9. 小米8护眼模式无效_雷军没有交代的小米9的N个细节,这篇文章全告诉你了
  10. XenApp For Windows 2016 关闭程序后无法结束进程
  11. php从头部添加,php如何向header头添加Authorization信息?
  12. 初识:如何实现利用C语言代码封装成可以安装的windows软件?
  13. sqlserver 时间递增循环
  14. 【富文本】解决会声会影、PR、AE处理视频后过大的问题(三款工具)专业视频压制软件|专业视频压制神器下载
  15. 这一切,只因心中有梦
  16. 从零开始,学会Python爬虫不再难!!! -- (13)selenium项目:自动点赞机丨蓄力计划
  17. csirs参考信号_发送和接收点(TRP)及信道状态信息参考信号(CSI-RS)传输的方法与流程...
  18. Python-集合 字典-set dict fronzenset
  19. 《现代密码学》学习笔记——第三章 分组密码 [三]分组密码的运行模式
  20. 软件设计工程——设计流程

热门文章

  1. Java语言高级(第三部分)异常多线程 ->(个人学习记录笔记)
  2. 稚晖君_瀚文机械键盘
  3. websocket站内信实时消息推送
  4. 挖掘用户反馈中的宝藏——NLP文本标签化解密
  5. 前后端分离的文件上传,上传zip或者rar压缩包(vue+springboot)。
  6. QTextEdit的使用
  7. 【Markdown Pad 2常见问题3】Markdown Pad 2插入本土图片无法显示
  8. P7939 [B1] Alice Wins (easy version)--题解报告
  9. 什么是Saas架构?
  10. saas系统项目总结