安装redis

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

tar xzf redis-3.0.7.tar.gz

ln -s redis-3.0.7 redis

yum install gcc -y

make

##zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录


README

说的是关于分配器allocator, 如果有MALLOC  这个 环境变量, 会有用这个环境变量的 去建立redis。

而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。

但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。

解决办法

make MALLOC=libc

make MALLOC=libc

make

make install

redis-cli -v


redis-server /root/redis/redis.conf & (从配置文件启动)

redis-cli -h 127.0.0.1 -p 6379

redis-cli -h 127.0.0.1 -p 6379 get hello    (直接得到命令的返回结果)


#停止redis服务

redis-cli shutdown

##redis关闭的过程:断开与客户端的连接、持久化文件生成

##kill -9 强制杀死redis服务,不但不会做持久化操作,还会造成缓存区资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况

##redis还有一个参数,代表是否在关闭redis前,生成持久化文件;

redis-cli shutdown nosave|save


redis有五种数据结构,他们是键值对中的值,对于键来说有一些通用的命令

1.查看所有键

keys *

2.键总数

dbsize

3.检查键是否存在

exists key

如果键存在返回1,不存在返回0

4.删除键

del keys

del是一个通用的命令,无论值是什么数据结构类型,del命令都可以将其删除。

5.键过期

expire key seconds


ttl命令会返回键的剩余过期时间,他有3种返回值;

大于等于0的整数:键剩余的过期时间

-1:键没设置过期时间

-2:键不存在


6.键的数据结构类型

type key


数据结构和内部编码:

type命令实际返回的就是当前值的数据结构类型,他们分别是:string(字符串)、hash、list(列表)、set(集合)、zset(有序集合)

实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样会在redis会在合适的场景选择合适的内部编码

可以通过object encoding命令查询编码:

object encoding hello


redis这样设计有两个好处:第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令。

第二,多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候redis会根据配置选项将列表类型的内部实现转换为linkedlist.


单线程架构:

redis使用了单线程结构和I/O多路服用的模型来实现高性能的内存数据库服务


为什么单线程还能这么快?

通常来讲,单线程处理能力要比多线程差。

第一,纯内存访问;第二,非阻塞I/O;第三单线程避免了线程切换和竞态产生的消耗。

但是单线程会有一个问题:对于每隔命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于redis这种高性能的服务来说是致命的,所以redis是面向快速执行场景的数据库。


命令:

1、set key value [ex seconds] [px milliseconds] [nx|xx]  设置值

ex seconds:为键设置秒级过期时间

px milliseconds:为键设置毫秒级过期时间

nx:键必须不存在,才可以设置成功,用于添加

xx:与nx相反,键必须存在,才可以设置成功,用于更新

2、get key   获取值

如果要获取的键不存在,则返回nil(空)

3.批量设置值

mset key value [key value ...]

4.批量获取值

mget key [key ...]

5.计数

incr key

incr命令用于对值做自增操作,返回结果分为三种情况:

值是不是整数,返回错误

值是整数,返回自增后的结果

键不存在,按照值为0自增,返回结果为1


不常用命令

1.追加值

append key value

append可以向字符串尾部追价值

2.字符串长度

strlen key

3.设置并返回原值

getset key value

getset和set一样会设置值,但是不同的是,他同时会返回键原来的值

4.设置指定位置的字符

setrange key offeset value

5.获取部分字符串

getrange key start end


内部编码

字符串类型的内部编码有3种

int:8个字节的长整型

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

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