zoukankan      html  css  js  c++  java
  • redis学习笔记之redis简介

    redis简介

    Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求。同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不同角色。

    存储结构

    Redis是REmote Dictionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容,目前为止redis支持的键值数据类型如下:字符串类型,散列类型,列表类型,集合类型,和有序集合类型。其中一个字符串类型键值允许存储的数据最大容量为521M.

    内存存储与持久化

    Redis数据库中的所有数据都存储在内存中。在一台普通的笔记本电脑上,Redis可以在一秒内读写超过10万个键值。
    数据存储在内存也有问题比如断电。redis还提供了持久化的存储,既可以将内存的数据异步写入应哦按,同时不影响继续
    提供服务。

    功能丰富

    Redis可以为每个键设置生存时间,生存时间到后期会自动删除,这一功能可以利用redis作为缓存系统来调用。
    除此之外,redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以容易地实现一个高性能的优先级队列,同时在更高层上,redis还支持"发布/订阅"的消息模式,可以基于此构建聊天室。

    redis的安装

    参考 -----

    redis命令行客户端

    通过redis-cli向redis发送命令,

    通过-h和-p自定义地址和端口号
    $redis-cli -h 127.0.0.1 -p 6379
    

    通过ping命令测试连接是否正常

    $redis-cli PING
    ####状态回复
    PONG
    ####错误回复
    如果上述命令不存在或者存在格式错误,会返回以error开头的错误。如
    reids>ERRORCOMMEND
    输出
    (error)ERR unknow command 'ERRORCOMMEND'
    

    获取先输入redis-cli进入交互模式,然后自由输入命令,例如PING.

    整数回复

    返回递增后的键值,类似mysql最后的索引值

    依次执行以下命令
    redis-cli
    127.0.0.1:6379> set foot bar
    OK
    127.0.0.1:6379> INCR foo
    (integer) 1
    127.0.0.1:6379> set foot bar
    OK
    127.0.0.1:6379> INCR foo
    (integer) 2
    

    可以看到每次插入一条数据返回值都跟着变化。

    字符串回复

    127.0.0.1:6379> set foot bar
    OK
    127.0.0.1:6379> get foo
    "bar"
    127.0.0.1:6379> set foo banana
    OK
    127.0.0.1:6379> get foo
    "banana"
    127.0.0.1:6379>
    

    可以看到get命令可以获取foo的最新的键值。

    字符串多行回复

    127.0.0.1:6379> KEYS *
    1) "proxies"
    2) "foo"
    3) "foot"
    

    返回键名1是我之前执行的,3是之前foo打错了执行的。keys命令需要便利redis中的所有键,当键的数量较多时会影响性能,不建议生产环境中使用。

    多行数据库

    redis提供了多个来存储数据的字典,每个字典类型mysql的数据量,每个数据库对外都是以0开始递增,redis默认支持16个数据库,客户端连接到服务端时,redis默认使用0进行操作数据库,使用select可以根据数据库。比如选择1号数据库:

    redis-cli
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> get foo
    (nil)
    127.0.0.1:6379[1]>
    

    redis不支持自定义数据库的名字,每个数据库必须以编号命名。比如可以使用0号数据库存储某个应用生产环境的数据,1号数据库存储测试环境中的数据,需要注意的是不同的应用应该使用不同的redis实例redis也不支持为每个数据库设置不同的访问密码。
    最重要的是redis实例中所有数据库的数据并不是完全隔离的,比如FLUSHALL可以清空一个redis实例中所有数据库中的数据。。由于redis非常轻量级,一个空的redis实例占用内存只有1MD左右,所以不用担心多个redis实例会额外占用很多内存。

    几个基础命令

    1.keys 见上面的例子

    2.判断一个键是否存在

    exists key 如果存在返回1 ,不存在返回0

    0.0.1:6379> exists foo
    (integer) 1
    127.0.0.1:6379> exists foo2
    (integer) 0
    127.0.0.1:6379> exists foot
    (integer) 1
    127.0.0.1:6379>
    

    3.删除键

    del key [key ...]
    可以删除一个或者多个空格间隔,返回值是删除的个数。del命令不支持通配符。

    127.0.0.1:6379> set f1 1
    OK
    127.0.0.1:6379> set f3 1
    OK
    127.0.0.1:6379> set f2 1
    OK
    127.0.0.1:6379> keys *
    1) "key"
    2) "f1"
    3) "proxies"
    4) "f2"
    5) "foot"
    6) "foo"
    7) "f3"
    127.0.0.1:6379> del f1
    (integer) 1
    127.0.0.1:6379> del f2 f3
    (integer) 2
    127.0.0.1:6379>
    

    3.获取键值的数据类型
    type key
    type命令用来获取键值类型,返回值可能是string,hash,list,set,zset(有序集合)。

    127.0.0.1:6379> set test 1
    OK
    127.0.0.1:6379> type test
    string
    127.0.0.1:6379> lpush test2 2
    (integer) 1
    127.0.0.1:6379> type test2
    list
    127.0.0.1:6379>
    

    lpush命令是向指定的列表类型键中增加一个元素,如果不存在则创建。后面详解。

    读取键值

    get key
    根据键获取其值。

    127.0.0.1:6379> get fo
    (nil)
    127.0.0.1:6379> get foo
    "banana"
    127.0.0.1:6379>
    

    不存在的时候返回nil.

    递增数字

    INCR key

    增加指定的整数

    INCRBY key increment
    incrby和incr命令效果差不多,区别是incrby可以指定增加的数字

    127.0.0.1:6379> incrby bar 2
    (integer) 2
    127.0.0.1:6379> incrby bar 5
    (integer) 7
    127.0.0.1:6379> incr bar
    (integer) 8
    127.0.0.1:6379> incr bar
    (integer) 9
    127.0.0.1:6379>
    

    增加指定的浮点数

    incrbyfloat key inrement
    这个命令类似上面两个只不过是可以传递一个浮点数而已

    127.0.0.1:6379> incrbyfloat bar 3.14
    "12.140000000000001"
    127.0.0.1:6379> incrbyfloat bar 3.14e+9
    "3140000012.1399999"
    127.0.0.1:6379>
    

    减少指定的整数

    有增加就有减少
    decr和decrby和增加的用法一样,只不过是键值递减。
    decrby key 4相当于incrbu key -4

    向尾部追加值

    向键值的末尾加字符串,如果不存在就是相当于set key value

    127.0.0.1:6379> append bar "345"
    (integer) 21
    127.0.0.1:6379> get bar
    "3140000012.1399999345"
    127.0.0.1:6379>
    127.0.0.1:6379> append asd "hello dj"
    (integer) 8
    127.0.0.1:6379> get asd
    "hello dj"
    127.0.0.1:6379>
    

    获取字符串长度

    STRLEN key
    返回键值长度,不存在返回0.

    127.0.0.1:6379> set key "￀￷ᄎᆭ"
    OK
    127.0.0.1:6379> strlen key
    (integer) 4
    127.0.0.1:6379> set key "ᅣ ̄채"
    OK
    127.0.0.1:6379> strlen key
    (integer) 4
    127.0.0.1:6379>
    
    

    同时设置多个键值

    Mget key/mset key value
    mget/mset和get/set相似,前者可以获取/设置多个值。

    (integer) 4
    127.0.0.1:6379> mget bar foo
    1) "3140000012.1399999345"
    2) "banana"
    127.0.0.1:6379> mset a 1 b 2
    OK
    127.0.0.1:6379>
    

    位操作

    getbit key offset
    setbit key offset value
    bitcount key [start][end]
    bitop operation destkey key [key ....]
    一个字节由8个二进制位组成,redis提供了以上四个命令可以直接对二进制进行操作。

  • 相关阅读:
    Shiro理解与总结
    spark教程(14)-共享变量
    Hive 教程(十)-UDF
    multivariate_normal 多元正态分布
    windows 安装 python 踩坑记录
    EM 算法(三)-GMM
    EM 算法(二)-KMeans
    EM 算法(一)-原理
    sklearn-GDBT
    集成学习-Boosting 模型深度串讲
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9547374.html
Copyright © 2011-2022 走看看