• Redis入门


    Redis


    1、查看redis进程状态

    [root@iZwz9cblj816cr6br161xoZ ~]# ps -ef|grep redis  # 查看Redis进程的状态
    root       734 32446  0 15:31 pts/2    00:00:00 grep --color=auto redis
    root      7591     1  0 Feb02 ?        01:20:47 redis-server *:6379
    root     32346 31563  0 15:18 pts/0    00:00:00 redis-cli -p 6379
    root     32528 32473  0 15:20 pts/3    00:00:00 redis-cli -p 6379
    
    

    介绍 :string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(simple dynamic string,SDS)。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)(C 字符串为 O(N)),除此之外,Redis 的 SDS API 是安全的,不会造成缓冲区溢出。

    • 常用命令 : set,get,strlen,exists,dect,incr,setex 等等。
    • 应用场景 :一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。

    1、String

    127.0.0.1:6379> set name hzb  # 设置name的值
    OK
    127.0.0.1:6379> set age 23 # 设置age的值
    OK
    127.0.0.1:6379> keys *  # 获取所有的Key
    1) "age"
    2) "name"
    127.0.0.1:6379> get name # 取出name里的值
    "hzb"
    127.0.0.1:6379> Exists name # 判断key为name的是否存在
    (integer) 1
    127.0.0.1:6379> Append name "is cool" # name后面拼接字符串“is Cool”
    (integer) 10
    127.0.0.1:6379> StrLen name # 查看字符串的长度
    (integer) 10
    127.0.0.1:
    

    批量设置

    127.0.0.1:6379> mset key1 value1 key2 value2 # 批量设置 key-value 类型的值
    OK
    127.0.0.1:6379> mget key1 key2 # 批量获取多个 key 对应的 value
    1) "value1"
    2) "value2"
    

    清除数据库内容

    127.0.0.1:6379> flushdb # 清空当前库的内容
    OK
    127.0.0.1:6379> flushAll # 清空所有库的内容
    OK
    

    自增1

    127.0.0.1:6379> set views 0 # 设置views的值
    OK
    127.0.0.1:6379> INCR views # 设置key为views的自增1
    (integer) 1
    127.0.0.1:6379> get views  # 取出key为views的值
    "1"
    127.0.0.1:6379> get views
    "1"
    127.0.0.1:6379> INCR views
    (integer) 2
    127.0.0.1:6379> get views
    "2"
    127.0.0.1:6379> INCRBY views 10 # 设置步长,一次增加10
    (integer) 11
    
    

    自减1

    127.0.0.1:6379> decr views # 设置属性自减1
    (integer) 1
    127.0.0.1:6379> get views # 获取值
    "1"
    
    127.0.0.1:6379> set name "hzbisCool" # 设置key值
    OK
    127.0.0.1:6379> GETRANGE name  0 3 # 获取索引为0-3的值
    "hzbi"
    127.0.0.1:6379> GETRANGE name 0 -1 # 获取name的所有值
    "hzbisCool"
    
    127.0.0.1:6379> set key1 abcdef # 设置key1的值
    OK
    127.0.0.1:6379> get key1
    "abcdef"
    127.0.0.1:6379> SETRANGE key1 0 XX  # 字符串替换
    (integer) 6
    127.0.0.1:6379> get key1
    "XXcdef"
    
    
    # setex (set with expire) # 设置过期时间
    # setnx (set if not exist) # 不存在在设置 (在分布式锁中会常常使用!)
    127.0.0.1:6379> setex key3 30 "hello" # 设置key3 的值为 hello,30秒后过期
    OK
    127.0.0.1:6379> ttl key3
    (integer) 26
    127.0.0.1:6379> get key3
    "hello"
    127.0.0.1:6379> setnx mykey "redis" # 如果mykey 不存在,创建mykey
    (integer) 1
    127.0.0.1:6379> keys *
    1) "key2"
    2) "mykey"
    3) "key1"
    127.0.0.1:6379> ttl key3
    (integer) -2
    127.0.0.1:6379> setnx mykey "MongoDB" # 如果mykey存在,创建失败!
    (integer) 0
    127.0.0.1:6379> get mykey
    "redis"
    ##########################################################################
    mset
    mget
    127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同时设置多个值
    OK
    127.0.0.1:6379> keys *
    1) "k1"
    2) "k2"
    3) "k3"
    127.0.0.1:6379> mget k1 k2 k3 # 同时获取多个值
    1) "v1"
    2) "v2"
    3) "v3"
    127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是一个原子性的操作,要么一起成功,要么一起
    失败!
    (integer) 0
    127.0.0.1:6379> get k4
    (nil)
    # 对象
    set user:1 {name:zhangsan,age:3} # 设置一个user:1 对象 值为 json字符来保存一个对象!
    # 这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全OK了!
    127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
    OK
    127.0.0.1:6379> mget user:1:name user:1:age
    1) "zhangsan"
    2) "2"
    ##########################################################################
    getset # 先get然后在set
    127.0.0.1:6379> getset db redis # 如果不存在值,则返回 nil
    (nil)
    127.0.0.1:6379> get db
    "redis
    127.0.0.1:6379> getset db mongodb # 如果存在值,获取原来的值,并设置新的值
    "redis"
    127.0.0.1:6379> get db
    "mongodb"
    
    

    List

    介绍 :list 即是 链表。链表是一种非常常见的数据结构,特点是易于数据元素的插入和删除并且且可以灵活调整链表长度,但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList,但是 C 语言并没有实现链表,所以 Redis 实现了自己的链表数据结构。Redis 的 list 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。

    • 常用命令: rpush,lpop,lpush,rpop,lrange、llen 等。
    • 应用场景: 发布与订阅或者说消息队列、慢查询。
    127.0.0.1:6379> rpush myList value1 # 向 list 的头部(右边)添加元素
    (integer) 1
    127.0.0.1:6379> rpush myList value2 value3 # 向list的头部(最右边)添加多个元素
    (integer) 3
    127.0.0.1:6379> lpop myList # 将 list的尾部(最左边)元素取出
    "value1"
    127.0.0.1:6379> lrange myList 0 1 # 查看对应下标的list列表, 0 为 start,1为 end
    1) "value2"
    2) "value3"
    127.0.0.1:6379> lrange myList 0 -1 # 查看列表中的所有元素,-1表示倒数第一
    1) "value2"
    2) "value3"
    

    通过 rpush/rpop 实现栈:

    127.0.0.1:6379> rpush myList value1 value2 value3
    (integer) 3
    127.0.0.1:6379> rpop myList # 将 list的头部(最右边)元素取出
    "value3"
  • 相关阅读:
    flash 搜索算法
    小波分析
    Generalised Policy Iteration With Monte-Carlo Evaluation
    Learning an Optimal Policy: Model-free Methods
    To discount or not to discount in reinforcement learning: A case study comparing R learning and Q learning
    adaptive heuristic critic 自适应启发评价 强化学习
    Q-learning
    On Using Very Large Target Vocabulary for Neural Machine Translation Candidate Sampling Sampled Softmax
    Brotli
    数据到达etl系统的时间晚于事务发生的时间
  • 原文地址:https://www.cnblogs.com/HezhenbinGoGo/p/14532872.html
Copyright © 2020-2023  润新知