redis系统级基础命令

  • info 查看系统信息
    # Server
    redis_version:3.2.100
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:dd26f1f93c5130ee
    redis_mode:standalone
    os:Windows
    arch_bits:64
    multiplexing_api:WinSock_IOCP
    process_id:17004   //进程ID
    run_id:4504fcef813ee822421b3cf38c73aa72a45509b4
    tcp_port:6379
    uptime_in_seconds:1320
    uptime_in_days:0
    hz:10
    lru_clock:12587164
    executable:D:\Program Files\Redis\redis-server.exe
    config_file:D:\Program Files\Redis\redis.windows.conf
    # Clients
    connected_clients:2
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    # Memory
    used_memory:711320
    used_memory_human:694.65K
    used_memory_rss:673408
    used_memory_rss_human:657.63K
    used_memory_peak:787128
    used_memory_peak_human:768.68K
    total_system_memory:0
    total_system_memory_human:0B
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:0.95
    mem_allocator:jemalloc-3.6.0
    # Persistence
    loading:0
    rdb_changes_since_last_save:0
    rdb_bgsave_in_progress:0
    rdb_last_save_time:1556090947
    rdb_last_bgsave_status:ok
    rdb_last_bgsave_time_sec:0
    rdb_current_bgsave_time_sec:-1
    aof_enabled:0
    aof_rewrite_in_progress:0
    aof_rewrite_scheduled:0
    aof_last_rewrite_time_sec:-1
    aof_current_rewrite_time_sec:-1
    aof_last_bgrewrite_status:ok
    aof_last_write_status:ok
    # Stats
    total_connections_received:2
    total_commands_processed:14
    instantaneous_ops_per_sec:0
    total_net_input_bytes:338
    total_net_output_bytes:11756156
    instantaneous_input_kbps:0.00
    instantaneous_output_kbps:0.00
    rejected_connections:0
    sync_full:0
    sync_partial_ok:0
    sync_partial_err:0
    expired_keys:0
    evicted_keys:0
    keyspace_hits:4
    keyspace_misses:2
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:6335
    migrate_cached_sockets:0
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    # CPU
    used_cpu_sys:0.16
    used_cpu_user:0.08
    used_cpu_sys_children:0.00
    used_cpu_user_children:0.00
    # Cluster
    cluster_enabled:0
    # Keyspace 当前redis实例的数据库空间
    db0:keys=2,expires=0,avg_ttl=0  //redis启动默认使用第0个空间

配置文件中databases 16代表有16个数据空间(0-15) ,可以使用 select [dbid] 切换空间;通常可以用于测试环境和生产环境的切换

127.0.0.1:6379> set a c
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get a
(nil)
  • select [dbid] 切换到指定的数据库
  • flushdb 清除当前数据空间(database),慎用
    * flushall 清除所有的数据空间
  • ping 测试连接是否正常
  • keys * 显示当前数据空间下所有的键
  • dbsize 显示当前数据空间下的键值对个数
  • save redis持久化命令
  • quit 退出client连接
  • monitor 日志监控命令

Redis键命令

  • set [key] [value] 设置键值对,返回OK显示设置成功

  • del [key] 删除键值对,

    • (integer) 1 返回受影响的条数,删除不存在的键返回0
  • keys * 显示所有的键

    • 如果为空显示 (empty list or set)
  • exists [key] 查看键是否存在

  • expire [key] [time] 设置key的有效期;可以用于session的有效期

    • expire a 10 设置a的有效期是10秒
  • ttl [key] 查看key的过期时间

    • (integer) -1返回-1代表key没有过期时间
    • 正数表示剩余的有效时间
    • (integer) -2 返回-2代表key不存在
  • type [key] 查看key的类型,若是做动态数据类型的话,可以根据key的类型决定怎么取值

    • key不存在返回none,存在则返回key的类型
      127.0.0.1:6379> set a b
      OK
      127.0.0.1:6379> type a
      string
      127.0.0.1:6379> hset hash name tom
      (integer) 1
      127.0.0.1:6379> type hash
      hash
      127.0.0.1:6379> type name 
      none
      127.0.0.1:6379> keys *
      1) "a"
      2) "b"
      3) "hash"
  • randomkey 随机返回一个已经存在的key

  • rename [old_key] [new_key] 将key 重命名,不会直接校验是否存在

    • 若是key不存在则直接将key更名
    • 若是key已经存在则清除已存在的key,则直接将存在的key对应的值覆盖掉
      127.0.0.1:6379> keys *
      1) "c"
      2) "a"
      3) "b"
      4) "hash"
      127.0.0.1:6379> rename c d  //key不存在的话,直接将当前的值赋值给新key,然后删除
      OK
      127.0.0.1:6379> keys *
      1) "b"
      2) "a"
      3) "hash"
      4) "d"
      127.0.0.1:6379> get d
      "c"
      127.0.0.1:6379> rename b d //key已经存在的情况下,删除当前key,将key对应的值赋值给更名的key
      OK
      127.0.0.1:6379> get d
      "b"

      以 nx 结尾的命令一般比较特殊,会有包含判断的逻辑

  • renamenx [old key] [new key] 将key进行更名,若是新的key不存在

127.0.0.1:6379> renamenx a b
(integer) 0
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> renamenx a m
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> get m
"a"

redis数据结构之字符串结构(String)

  • set [key] [value] 设置键值对,实际就是使用的字符串结构
  • setex [key] [time] [value] ex 是expire的缩写,可以设置有效期
    • setex c 100 c 设置c的值是c,有效期是100秒
  • psetex [key] [time] [value]可以设置有效期 ,时间单位是毫秒
    • psetex d 10000 d 设置d的值是d,有效期是10秒
  • getrange key start_index end_index 返回某个值的截取的范围,两边都是取闭区间
127.0.0.1:6379> set name myname
OK
127.0.0.1:6379> getrange name 0 2
"myn"
  • getset key value 先get再set,也就是返回前一个值,在设置新的值

    • set 命令只会返回成功(OK)和失败
  • mset key1 value1 key2 value2 key3 value3 同时设置多个key和value

  • mget key1 key2 key3 同时设置多个key和value

//mget 对应mset
127.0.0.1:6379> mset a a b b c c
OK
127.0.0.1:6379> mget a b c
1) "a"
2) "b"
3) "c"
  • setnx key value 类似于set命令,但是会进行逻辑判断,只有当key不存在的时候才会set,不然无法设置值

  • strlen key 查看某个字符串的长度

  • msetnx key1 value1 key2 value2 ... 批量设置值,但是会判断值是否存在,只有不存在才会设置

    • 返回0 代表设置失败(全部失败,有点事务的感觉),有事务的原子性,要么全部成功要么全部失败
    • 返回1 代表设置成功
  • set key init-num 设置一个数字类型的初始值,

  • incr key 让一个数字加1 ,

    • 若是key存在,那么key对应的值必须是数字,不然会出现错误(error) ERR value is not an integer or out of range
    • 直接执行incr key 若是key不存在,则会创建一个值从1开始的键值对
  • incrby key num 让一个值为数字的key增加固定的值

    • incrby num 100 : 让key为num的值增加100
  • decr key 让一个值为数字的key减少1 ,和incr对应,若是不存在,直接创建从-1开始,若是存在且是数字,直接在原有基础上减一

  • decrby key num 让一个值为数字的key减少固定的值

    以上数字操作都会返回操作之后的结果

127.0.0.1:6379> incr A //若是key不存在,则创建一个key为A值为1的键值对
(integer) 1
127.0.0.1:6379> get A
"1"
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> incrby num 100 //让key为num的值增加100
(integer) 103
127.0.0.1:6379> decr num
(integer) 102
127.0.0.1:6379> decr f
(integer) -1
127.0.0.1:6379> decr f
(integer) -2
127.0.0.1:6379> decrby num 10
(integer) 92
  • append key str 直接将一个字符串追加到value的末尾,返回字符串的长度
    • append a hello 将 字符串hello追加到key为a的值后面

redis数据结构之 哈希(hash)

切换数据空间 select 1

  • hset hash-name key value 为hash赋值,不存在则创建
  • hexists hash-name key 判断hash中的某个键值是否存在
  • hget hash-name key 获取hash中某个key对应的值,若是不存在返回nil
  • hgetall hash-name 获取hash中的所有的key-value
  • hkeys hash-name 获取hash中所有的key
  • hvals hash-name 获取hash中所有的value
  • hlen hash-name 获取键值对的个数,其实也是key的个数
  • hmget hash-name key1 key2 ... 获取hash中的多个key对应的值
  • hmset hash-name key1 value1 key2 value2... 一次设置多个键值对给hash
  • hdel hash-name key1 key2... 删除指定hash中key-value
  • hsetnx hash-name key value 在指定hash表中如果键不存在,将键值对插入hash集合,,添加成功返回1 失败返回0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> hset map name zhang
(integer) 1
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> type map  //查看key对应的值类型
hash
127.0.0.1:6379[1]> hexists map name  //查看hash是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379[1]> hexists map name1 //不存在则返回0
(integer) 0
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> hget map name //获取hash集合中key为name的值
"zhang"
127.0.0.1:6379[1]> hlen map //获取hash长度
(integer) 2

127.0.0.1:6379[1]> hmget map name age //获取name和age对应的值
1) "zhang"
2) "15"
127.0.0.1:6379[1]> hmset map email az450024285@qq.com sex boy
OK
127.0.0.1:6379[1]> hgetall map
1) "name"
2) "zhang"
3) "age"
4) "15"
5) "email"
6) "az450024285@qq.com"
7) "sex"
8) "boy"
127.0.0.1:6379[1]> hlen map
(integer) 4
127.0.0.1:6379[1]> hdel map sex
(integer) 1
127.0.0.1:6379[1]> hsetnx map name lisi //判断存在与否,添加hash键值对;
(integer) 0
127.0.0.1:6379[1]> hsetnx map addr hubei
(integer) 1

Redis数据结构之链表(List)

  • 类似于Java的list,允许重复值

切换数据空间 select 2

  • lpush list-name value1 value2 value3... 将元素赋值给list,如果list不存在则创建

    • 注意这里是以队列的方式放入
  • llen list-name 查看集合的长度

  • lrange list-name 0 2 获取集合范围的值,两边都是闭区间,但是这个设定的范围可以比实际的范围区间大

  • lset list-name index value 设置指定索引位置的值,

    • 必须要在list范围内,不然(error) ERR index out of range
  • lindex list-name index 获取指定索引位置的元素

  • lpop list-name 移除列表第一个元素

  • rpop list-name 移除列表最后一个元素

select 2
127.0.0.1:6379[2]> lpush list 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379[2]> keys *
1) "list"
127.0.0.1:6379[2]> type list
list
127.0.0.1:6379[2]> llen list
(integer) 6
127.0.0.1:6379[2]> lrange list 0 2
1) "6"
2) "5"
3) "4"
127.0.0.1:6379[2]> lindex list 5
"1"

redis数据结构之set集合

  • set是无序的集合,可以排除重复

select 3 切换数据空间

  • sadd set-name value1 value2 value3... 添加元素到set,

    • 如果不存在集合则创建
    • 如果存在元素则不会再次添加返回0
  • scard set-name 返回set集合元素的数量

  • smembers set-name 返回集合元素的成员

  • sdiff set1 set2 差集合并,相当于set1-set2,返回set2中没有的元素

  • sinter set1 set2 交集合并 ,返回set1,set2中都有的元素

  • sunion set1 set2 合并两个集合,并且去重

  • srandmember set-name num 返回某个set集合中的一个或者多个随机元素

  • sismember set-name value 判断某个元素是否在集合中,返回1表示在集合中,返回0表示不在集合中

  • srem set-name value1 value2... 移除某个集合中的一个或者多个成员

  • spop set-name 移除一个随机元素 ,并且返回这个元素(被移除的)

    • 适用于高并发的情况,移除并且返回一个元素,例如对订单号的预存,生成不会重复的的订单号,存入,客户端直接取用即可
127.0.0.1:6379[3]> sadd set a b c d
(integer) 4
127.0.0.1:6379[3]> keys *
1) "set"
127.0.0.1:6379[3]> type set
set
127.0.0.1:6379[3]> sadd set a
(integer) 0
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> scard set
(integer) 4

redis数据结构之有序集合(sortedset)

  • 具备集合set的特性,添加删除查找的时间复杂度都是O(1),也是通过hash表实现的,但是可以保证有序

  • zadd sortedset-name 100 a 200 b 300 c 添加元素到有序集合中,若是集合不存在则会创建

    • 相当于指定一个优先级,按照这个优先级进行排序,按照分数从小到大进行排序
  • zcard sortedset-name 返回元素个数

  • zscore sortedset-name a 返回元素的优先级,也就是元素的分数,不存在的元素返回nil
    img

  • zcount sortedset-name score1 score2 返回某一个分数区间的元素个数,分数区间为闭合区间

  • zrank sortedset-name value 返回某一个元素在集合中的索引(也就是排序,位于集合中的第几个元素)

    这里注意索引和分数的区别,改变分数会影响排序

  • zincrby sortedset-name add-score-num value 将某个元素的分数提高add-score-num,返回提高后的分数,会影响到元素的索引和排序

    • zincrby sortedset 1000 a 将有序集合中的a元素的分数提升1000
    • zrank sortedset a 查看a元素当前的索引位置
  • zrange sortedset-name start end 返回某个范围内的所有元素,范围可以比实际的范围大

    • zrange sortedset 0 99 返回sortedset中的前一百个元素 ,两边都是闭区间
  • zrange sortedset-name start end withscores返回某个范围内的全部元素和元素的分数
    img

小确幸

每一丝灵感都值得被记录,每一笔记录都是成长,每一点成长都值得欢呼

博主个人站: www.imisty.cn
CSDN博客: https://blog.csdn.net/lookinthefog
博客园 :https://imist.cnblogs.com/

希望能够认识一些热爱技术的小伙伴,欢迎友链接哟