您的位置:首页 > 数据库 > Redis

BigBrother的大数据之旅Day 16 redis(1)

2019-08-19 22:30 721 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/jjjjjjabnannnan/article/details/99770075

(red is ?O(∩_∩)O哈哈~)

1 概念

Redis 基于内存并支持持久化,高性能key-value的nosql数据库

(1)单线程,省去了上下文切换带来的消耗,效率高

(2)用途:缓存、数据库(需要持久化)、中间件(需要持久化)

(3)支持类型:有 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) , 位图( bitmaps ), hyperloglogs 和 地理空间(geospatial) 索引半径查询。

2 数据库产品

类型 主要产品 简介
KV存储 Redis/memcached 使用key快速查询到value,memcached支持string类型的value,redis除string外还支持set/hash/sorted set/list等类型
文档存储 mongoDB/CouchDB 使用JSON或类JSON的BSON数据结构,存储内容为文档型,能实现关系数据库的部分功能
列存储 Hbase/Cassandra 按照列进行数据存储,便于存储结构化和半结构化数据,方便做数据压缩和针对某一列或某几列的数据查询
图存储 Neo4J/FlockDB 图形关系的存储,能够很好弥补关系型数据库在图形存储的不足
对象存储 Db4o/Versant 通过类似面向对象语言的方式操作数据库,通过对象的方式存取数据
XML数据库 Barkeley DB XML/BaseX 高效存储XML数据,支持XML的内部查询语法,如Xquery、Xpath

数据库排行

注意有的是kv,有的是关系,有的是文档
图片来源:http://db-engines.com/en/ranking

3 redis安装

我安装的版本为2.8

(1)解压软件

tar -zxvf /temp/redis-2.8.18.tar.gz  -C /usr/local/redis/

(2) 安装依赖的环境

yum -y install gcc tcl

ps : gcc是GNU编译器套件(GNU Compiler Collection),它包括了CC++Objective-CFortranJavaAdaGo语言D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。

ps: gcc内容来自百度

(3) 编译和安装

安装指定目录为 /opt/redis

make && make PREFIX=/opt/redis install

(4) 加入环境变量 到/etc/profile

export REDIS_HOME=/opt/redis
export PATH=$PATH:$REDIS_HOME/bin

(5) 启动服务器

a: 在命令行输入 redis-server

默认开启6379端口的服务器,默认为阻塞状态

b: 在命令行输入redis-server + 配置文件

在配置文件中加入 daemonize yes,允许后台启动

在启动时输入

redis-server + 配置文件

c: 使用脚本配置

在util目录下有 ./install-server.sh,命令行启动改文件,

配置完毕后就会启动端口为7777的服务器

(6) 启动客户端
redis-cli 默认连接 6379端口

redis-cli -p + 端口 : 连接指定端口的redis-server

可以使用 redis -cli --help查看命令

(7) 停止服务器

第一种开启方式,通过kill 停止

第二种,通过redis-cli shutdown : 虽然看起来是客户端命令,其实是关闭服务器端

第三种 , 由于是通过脚本配置的,所以把redis_端口号当做了系统服务,直接使用service命令就可以了

(8) 选择数据库

a:在登录到redis中使用select 0-n(n为总的数据库数量-1,可以在配置文件中设置)

b: 在linux中使用redis-cli -n 2 选择第3 个数据库

(9) 清除数据库

登录redis后,输入flushdb 清空当前选择的数据库

flushall 清空所有的数据库

4 redis 数据结构

key :

二进制,可以使用任何二进制作为key

2^32 -1 位 也就是最多512M个字节的key

4.1 字符串

key和value都是string类型

设置值

1)set key value 如

set k1 100 – 设置k1的值为100

2)set key value EX 秒数 或者 set key PX 毫秒数

set k2 100 EX 10 – 设置k2的值为100,但是只存在100秒

3)set key value NX or XX 和 setnx key value or setex key value

相当于在创建kv时多了一个if判断,nx为not exist,xx为exit,如果条件成立就执行设置key和value

4)如果设置完值之后,任然想让某个kv在规定时间内有效,使用expire命令

expire key 秒数 或者 expireat key timstamp

PEXPIREAT key milliseconds-timestamp


pexpire key 毫秒数

persist key 让key 持久化,不再受ttl的影响(值为ttl值为 -1)

5)多次设值

mset key1 value1 key2 value2 key3 value3

mset key1 value1 key2 value2 key3 value3 nx(原子性) 一个不成功,都不成功

6 ) 重命名key

rename key newkey (新的键存在的情况下,就把新键覆盖了)

renamenx key newkey (新的键不存在的时候,才能执行)

7)追加值

append key value

8)setrange key 下标 值(可以为多位,多位的时候覆盖后面的值)

查询值

1)使用ttl命令查询 key的剩余时间(pttl查询毫秒数)

-2为过期 -1为永不过期

2) exists key

查看key是否存在, 0 表示不存在 ,1 表示存在

3 ) get key

查询key对应的value

4 ) strlen key

查询value的长度

5)keys 命令查询存在的key

keys + * 查询所有的key(在生产环境中不建议使用)

key + ? 查询一个字符的key

key + [abc] 查询包含a或者b或者c的key

以上几种可以配合使用

6)mget key1 key2… 获取多个key对应的值

7 ) getset key value 先获取值,然后再设置值

8 ) type key 查看键的类型

9 ) object encoding key 查询vaule的数据结构

int:8个字节的长整型。

embstr:小于等于39个字节的字符串。

raw大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现,可能不太准哦

比如

10 ) getrange key 开始下标 结束下标,查询某一个范围的值

比如 value为tina

0123为其下标

-4-3-2-1也为其下标

删除键

del key

步长操作

incr key 或者 decr key 默认增加或者减少1

incrby key 步长 或者 decrby key 步长

4.2 字节数组

bitmap:名字吓人,其实就是按位存储,最多存储512个字节的内容

设置值

1)setbit key 偏移量 value – value的值为0或者1

默认为 0 只需要设置为1的就可以了

查询值

1)getbit key 偏移量 :获取偏移量(下标)上的值

get key 可以查询全部的值

2)bitpos key 1或者0 strat(字节索引) end(字节索引)

三个字节 abc,索引分别为012

bitpos kj(key) 1(查询的值) 0 第1个字节,2 第3个字节

从第1个字节查询到第3个字节,返回第一次出现1的索引

3 ) 统计个数

bitcount key 开始索引 结束索引(字节索引) 统计从开始字节到结束字节有多少个1

bitcount key 统计这个value中有多少个1

位操作

bitop and | or | xor dskey key1 key2 对key1和key2 进行 位与,或,异或操作,放入dskey中

异或: 相同为0 ,不同为1(巧记:相当于加)

bitop not dskey key 对key进行取反 放入 dskey中

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: