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提供了以上四个命令可以直接对二进制进行操作。

  • 相关阅读:
    Eclipse 导入项目乱码问题(中文乱码)
    sql中视图视图的作用
    Java基础-super关键字与this关键字
    Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解
    Android View和ViewGroup
    工厂方法模式(java 设计模式)
    设计模式(java) 单例模式 单例类
    eclipse乱码解决方法
    No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
    【转】使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9547374.html
Copyright © 2011-2022 走看看