博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis的主要内容概览之学习笔记一
阅读量:6072 次
发布时间:2019-06-20

本文共 5068 字,大约阅读时间需要 16 分钟。

  hot3.png

redis(Remote Dictionary Server)

历史与发展:

2008年一家意大利创业公司创始人对mysql性能感到失望,于是为公司项目量身打造一行款内存数据库redis.知名用户群有:新浪博客,街旁,知乎,github,等。

存储结构:以字典结构存储数据。

Redis支持的键值数据类型有:    字符串类型,散列类型,列表类型,集合类型,有序集合类型。    

内存存储与持久化: Redis数据库中所有数据都存储在内存中,可以在1秒内读写超过10万个键值。程序退出后内存中的数据会丢失,Radis提供对持久化的支持,内存中的数据异步写入到硬盘中,同时不影响继续提供服务。

简单稳定:在Redis中使用命令读写数据,命令于Redis相当于SQL语句于关系数据库。Redis使用C语言开发,代码量只有3万多行。

安装Redis:Redis约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版本(如2.4版,2.6版),为奇数的是非稳定版本。

windows下安装Redis:下载地址,下载解压到安装路径,然后在命令行切换到根安装包根路径,输入:redis-server.exe   redis.conf  验证redis是否安装成功。 

出现下面即说明redis服务端已安装成功:

154245_2Mw5_1789904.jpg

启动Redis: $redis-server

Redis服务器默认使用6379端口,自定义端口号:$redis-server --port  6388

停止Redis:    $redis-cli  SHUTDOWN    先断开所有客户端连接,然后配置执行持久化操作,最后退出。效果与直接关闭redis进程PID一样。

命令返回值:1.状态回复,2.错误回复,3.整数回复,4,字符串回复,5.多行字符串回复,

多数据库:Redis默认支持16个数据库,    每个数据库对外都是以一个从0开始的数据库命名,客户端与Redis建立连接后会自动选择0号数据库。Redis不支持自定义数据库名,每个数据库都以编号命名,不支持为每个数据库单独设置密码。Redis非常轻量级,一个空Redis实例占用内存只有1M左右。

获得符合规则的键名列表:KEYS pattern

获取Redis中所有的键:KEYS *

判断一个键是否存在:    EXISTS key,存在返回1,不存在返回 0.

删除键:DEL  key[key....]

获得键值的数据类型:TYPE key

--------------------------------------------------------------------------

字符串类型:

一个字符串类型的键允许存储的数据的最大容量是512M.

赋值与取值

SET key value

GET key

如:key="hello"在Redis中表示为    redis>SET key hello

    2. 递增数字

        INCR key

        让当前键值递增。

        增加指定的整数:INCRBY key increment.    INCR 和INCRBY命令基本一样。INCRBY指定一次增加的数值.

    3.递减数字

        DECR key

        让当前键值递减。

        递减指定整数:DECRBY key.    DECRBY    key     decrement.

    4.增加指定浮点数

        INCRBYFLOAT key increment

    5.向尾部追加值

        APPEND key value

    6.获取字符串长度

      STRLEN  key.

    7.同时获得/设置多个键值

    MGET key [key …]

    MSET key value [key value …]

    8.位操作

GETBIT key offset

SETBIT key offset value

BITCOUNT key [start] [end]

BITOP operation destkey key [key …]

-----------------------------------------------------------------------------------

散列类型:

散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。    

1.赋值与取值

HSET key field value

HGET key field

HMSET key field value [field value …]

HMGET key field [field …]

HGETALL key

2.判断字段是否存在

HEXISTS key field

3.当字段不存在时赋值

HSETNX key field value

4.增加数字

HINCRBY key field increment

5.删除字段

HDEL key field [field …]

命令:

1.只获取字段名或字段值

HKEYS key

HVALS key

2.获得字段数量

HLEN key

-------------------------------------------------------------------------------

列表类型:

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

命令:

1.向列表两端增加元素

LPUSH key value [value …]

RPUSH key value [value …]

2.从列表两端弹出元素

LPOP key

RPOP key

3.获取列表中元素的个数

LLEN key

4.获得列表片段

LRANGE key start stop

    

5.删除列表中指定的值

LREM key count value

命令:

1.获得/设置指定索引的元素值

LINDEX key index

LSET key index value

2.只保留列表指定片段

LTRIM key start end

3.向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

4.将元素从一个列表转到另一个列表R

POPLPUSH source destination

------------------------------------------------------------------------------------

集合类型:

集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是0(1)。

命令:

1.增加/删除元素

SADD key member [member …]

SREM key member [member …]

2.获得集合中的所有元素

SMEMBERS key

SMEMBERS命令会返回集合中的所有元素。

3.判断元素是否在集合中

SISMEMBER key member

4.集合间运算

SDIFF key [key …]

SINTER key [key …]

SUNION key [key …]

命令:

1.获得集合中元素个数

SCARD key

2.进行集合运算并将结果存储

SDIFFSTORE destination key [key …]

SINTERSTORE destination key [key …]

SUNIONSTORE destination key [key …]

3.随机获得集合中的元素

SRANDMEMBER key [count]

4.从集合中弹出一个元素

SPOP key

-----------------------------------------------------------------------------------

有序集合类型:

有序集合类型在某些方面和列表类型有些相似。

(1)二者都是有序的。

(2)二者都可以获得某一范围的元素。

但是二者有着很大的区别,这使得它们的应用场景也是不同的。

(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问

中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的

应用。

命令:

1.增加元素

ZADD key score member [score member …]

2.获得元素的分数

ZSCORE key member

3.获得排名在某个范围的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

4.获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

命令:

1.获得集合中元素的数量

ZCARD key

2.获得指定分数范围內的元素个数

ZCOUNT key min max

3.删除一个或多个元素

ZREM key member [member …]

4.按照排名范围删除元素

ZREMRANGEBYRANK key start stop

5.按照分数范围删除元素

ZREMRANGEBYSCORE key min max

6.获得元素的排名

ZRANK key member

ZREVRANK key member

7.计算有序集合的交集

ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]]

[AGREGATE SUM|MIN|MAX]

----------------------------------------------------------------------------------------

实现缓存:

为了提高网站的负载能力,常常需要将一些访问频率较高但是对CPU或IO资源消耗较大的操作的结果缓存起来,并希望让这些缓存过一段时间自动过期。

可以通过给键设置生存时间的方式实现。每次用

户访问首页时程序先查询缓存键是否存在,如果存在则直接使用缓存的值;否则重新计算排名

并将计算结果赋值给该键并同时设置该键的生存时间为两个小时。

---------------------------------------------------------------------------------------

节省空间:

精简键名和键值。

内部编码优化。

------------------------------------------------------------------------------------------

Lua语言:  

Lua是一个高效的轻量级脚本语言。Lua在葡萄牙语中是“月亮”的意思,它的徽标形似卫星,寓意着Lua是一个“卫星语言”,能够方便地嵌入到其他语言中使用。

-----------------------------------------------------------------------------------------

KEYS 与ARGV:

向脚本传递的参数分为KEYS和ARGV两类,前者表示要操作的键名,后者表    示非键名参数。

  -----------------------------------------------------------------------------------------------

持久化:

Redis的强劲性能很大程度上是由于其将所有数据都存储在了内存中,为了使Redis在重

启之后仍能保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,这一过程就是

持久化。

Redis支持两种方式的持久化,一种是RDB方式(快照方式),一种是AOF方式。可以单独使用其中一

种或将二者结合使用。

---------------------------------------------------------------------------------------------------

转载于:https://my.oschina.net/xiejunbo/blog/326917

你可能感兴趣的文章
ZipDemo
查看>>
浏览器中关于事件的那点事儿(转)
查看>>
[转]Vim 复制粘贴探秘
查看>>
4.元组
查看>>
为什么Dotnet Core的DI默认是在控制器中注入
查看>>
[Go] golang连接redis测试
查看>>
spring 缓存 @CachePut 和 @Cacheable 区别
查看>>
VS自定义代码段简单使用
查看>>
第12章 posix 线程
查看>>
POJ Oulipo
查看>>
JavaScript常见调试方法
查看>>
httpclient跳过https请求的验证
查看>>
Apache的Mod_rewrite学习 (RewriteCond重写规则的条件) 转
查看>>
Diary
查看>>
友盟消息推送(一)
查看>>
Python3学习笔记(十二):闭包
查看>>
第六周作业
查看>>
JavaScript学习——JavaScript比较和 逻辑运算
查看>>
tableView如何优化、 处理卡顿问题?
查看>>
玩转车联网2--汽车内部通讯和车联网整体架构
查看>>