redis初级

1.redis的优势

1.1存储结构

  1. 字符类型
  2. 散列类型
  3. 列表类型
  4. 集合类型
  5. 有序集合

1.2功能

  1. 可以为每个key设置超时时间;
  2. 可以通过列表类型来实现分布式队列的操作
  3. 支持发布订阅的消息模式

1.3简单

  1. 提供了很多命令与redis进行交互

2.redis的应用场景

  1. 数据缓存(商品数据、新闻、热点数据)
  2. 单点登录
  3. 秒杀、抢购
  4. 网站访问排名…
  5. 应用的模块开发

3.redis的安装

3.1 安装

1.下载包
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
2.解压
tar -xzvf redis-3.2.8.tar.gz

3.转到redis目录,执行编译
make

4.执行安装
make install

5.测试 如果全部项都是ok
make test

6.安装快捷方式
make install PREFIX=/usr/data/program/redis
cp redis.conf ../redis/redis.conf

7.编辑redis.conf,把daemonize 设置为yes 后台运行
vim redis.conf
daemonize yes

8.开机自启
echo "redis-server /usr/data/program/redis/redis.conf" >>/etc/rc.local

3.2 问题

初次安装可能遇到的问题 https://blog.csdn.net/haniyan/article/details/23122487

问题1 cc: command not found
yum install gcc

问题2 make[1]: *** [adlist.o] Error 1
make MALLOC=libc

问题3 make[1]: *** [test] Error 1
	修改配置文件目录解决
	mkdir /etc/redis
	cp redis.conf /etc/redis

	启动 redis-server /etc/redis/redis.conf

3.3  启动停止redis

1.启动停止
./redis-server ../redis.conf
./redis-cli shutdown

2.连接到redis的命令
 ./redis-cli -h 127.0.0.1 -p 6379

3.设置密码
修改redis.conf配置文件  

# requirepass foobared
requirepass 123   指定密码123

保存后重启redis就可以了

4.密码登录
[root@iZ2ze3zda3caeyx6pn7c5zZ bin]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123        //指定密码
OK
127.0.0.1:6379> keys *
1) "a"
2) "cit"

5.开启远程访问
Redis的配置文件redis.conf里bind 127.0.0.1 注释掉,否则只有本地可以访问

3.4 其他命令说明

redis-server 启动服务
redis-cli 访问到redis的控制台
redis-benchmark 性能测试的工具
redis-check-aof aof文件进行检测的工具
redis-check-dump rdb文件检查工具
redis-sentinel sentinel 服务器配置

4.多数据支持

默认支持16个数据库;可以理解为一个命名空间
跟关系型数据库不一样的点

  1. redis不支持自定义数据库名词
  2. 每个数据库不能单独设置授权
  3. 每个数据库之间并不是完全隔离的。 可以通过flushall命令清空redis实例面的所有数据库中的数据,通过 select dbid 去选择不同的数据库命名空间 。 dbid的取值范围默认是0 -15

5.使用入门

1)获得一个符合匹配规则的键名列表

keys pattern  [? / * /[]]

keys mic:hobby

2)判断一个键是否存在 , EXISTS key
3)type key 去获得这个key的数据结构类型

6.各种数据结构的使用

6.1字符类型

一个字符类型的key默认存储的最大容量是512M
1)赋值和取值
SET key value
GET key
2)递增数字
incr key

3)错误的演示
int value= get key;
value =value +1;
set key value;

3)key的设计
对象类型:对象id:对象属性:对象子属性
建议对key进行分类,同步在wiki统一管理
短信重发机制:sms:limit:mobile 138。。。。。 expire

4)其他
incryby key increment 递增指定的整数
decr key 原子递减
append key value 向指定的key追加字符串
strlen key 获得key对应的value的长度
mget key key… 同时获得多个key的value
mset key value key value key value …
setnx

6.2列表类型

list, 可以存储一个有序的字符串列表
LPUSH/RPUSH: 从左边或者右边push数据
LPUSH/RPUSH key value value …
{17 20 19 18 16}

llen num 获得列表的长度
lrange key start stop ; 索引可以是负数, -1表示最右边的第一个元素
lrem key count value
lset key index value
LPOP/RPOP : 取数据
应用场景:可以用来做分布式消息队列

6.3散列类型

hash key value 不支持数据类型的嵌套
比较适合存储对象
person
age 18
sex 男
name mic

hset key field value
hget key filed

hmset key filed value [filed value …] 一次性设置多个值
hmget key field field … 一次性获得多个值
hgetall key 获得hash的所有信息,包括key和value
hexists key field 判断字段是否存在。 存在返回1. 不存在返回0
hincryby
hsetnx
hdel key field [field …] 删除一个或者多个字段

6.4集合类型

set 跟list 不一样的点。 集合类型不能存在重复的数据。而且是无序的
sadd key member [member …] 增加数据; 如果value已经存在,则会忽略存在的值,并且返回成功加入的元素的数量
srem key member 删除元素
smembers key 获得所有数据

sdiff key key … 对多个集合执行差集运算
sunion 对多个集合执行并集操作, 同时存在在两个集合里的所有值

6.5有序集合

zadd key score member

zrange key start stop [withscores] 去获得元素。 withscores是可以获得元素的分数
如果两个元素的score是相同的话,那么根据(0<9 网站访问的前10名。

7.redis的事务处理

MULTI 去开启事务
EXEC 去执行事务

8.过期时间

expire key seconds
ttl 获得key的过期时间

9.发布订阅

publish channel message
subscribe channel [ …]

10.redis实现分布式锁

分布式锁的几种实现方式

  1. 数据库
  2. zookeeper
  3. redis 代码地址

参考 分布式锁简单入门以及三种实现方式介绍

11.redis多路复用机制

linux的内核会把所有外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个 file descriptor(文件描述符)。对于一个socket的读写也会有响应的描述符,称为socketfd(socket 描述符)。而IO多路复用是指内核一旦发现进程指定的一个或者多个文件描述符IO条件准备好以后就通知该进程
IO多路复用又称为事件驱动,操作系统提供了一个功能,当某个socket可读或者可写的时候,它会给一个通知。当配合非阻塞socket使用时,只有当系统通知我哪个描述符可读了,我才去执行read操作,可以保证每次read都能读到有效数据。操作系统的功能通过select/pool/epoll/kqueue之类的系统调用函数来使用,这些函数可以同时监视多个描述符的读写就绪情况,这样多个描述符的I/O操作都能在一个线程内并发交替完成,这就叫I/O多路复用,这里的复用指的是同一个线程
多路复用的优势在于用户可以在一个线程内同时处理多个socket的 io请求。达到同一个线程同时处理多个IO请求的目的。而在同步阻塞模型中,必须通过多线程的方式才能达到目的

你可能感兴趣的:(中间件)