1.redis

redis:开源的,使用c语言编写的NQL数据库

redis:基于内存运行,支持持久化(数据恢复)。采用的就是key-value(键值对)的存储形式,目前在分布式架构中,非常重要的一环

redis服务器程序,是一个单进程模式,即只有一个主进程工作。也就是在一台服务器上可以启动多个redis(端口号不能冲突)

redis的实际处理速度是完全依靠主进程的执行效率

服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降

如果部署了多个redis进程,虽然能提高redis的并发处理能力,但是会给服务器的cpu带来很大的压力

一台服务器,一般部署3个redis进程。(根据情况来看,高并发要部署多个,一般的情况,单进程足够)

1.1 redis的特点

1.具有极高的读写速度,数据读取每秒110000次,写入数据每秒可以执行81000的写入

2.支持丰富的数据类型

3.支持持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可以实现备份。

4.原子性,所有的操作都是原子性

5.支持主从模式—master–slave模式

1.2redis为什么这么快?

1.redis是纯内存结构,避免磁盘I/O的耗时

2.核心模块是一个单进程,减少了线程切换和回收线程的时间。

3.I/O的多路复用机制,每一个执行线路,都可以同时执行读和写。高并发的效率大大提高

特殊说明:redis的读写仍然是单进程处理

2.redis和mysql的区别

1、数据的存储方式不同。

2、扩展方式不同,性能上的提升,关系型数据库靠的是提升本机性能。非关系型数据库,可以横向扩展,加入节点服务器的方式提高性能

3、对事务的支持性,mysql支持事务,非关系型数据库也支持事务,redis也可以支持事务,但是稳定性和处理能力都不如关系型数据库。

3.redis的数据类型

redis的特点:读写速度快

数据类型:

1.string:也是redis最基本的类型,最多能存储512MB的数据,可以存储任何数据:数字,文字,图片,等等

2.list :列表当中的元素还是string类型

3.hash :对一个键进行多字段操作要用hash 节省内存空间

4. 无序集合 :set 元素不能重复 可以用来定义唯一值

5.有序集合 :zset 元素不能重复 但是权重可以相同,用来排名

6.位图(BitMap):存储位数据,可以进行位级别的操作。常用命令:SETBIT、GETBIT、BITCOUNT。

7.HyperLogLog:用于基数估算的数据结构。常用命令:PFADD、PFCOUNT。

8.地理位置(GeoSpatial):存储地理位置信息。常用命令:GEOADD、GEODIST、GEORADIUS。

4.string类型

keys * 查看所有键值对

set test guoqi

get test

keys test 查看键值对test

keys t* 查看t开头

keys t?查看t开头后的一位

exists test 查看这个键值对是否存在 1为存在 0为不存在

del test 删除键值对

type test 查看键值对的类型

append test1 hello 键不存在直接写入hello

append test1 work 键存在 把word增加进去

strlen test1 直接返回键的长度

incr test1 递增1(只能对数字)

decr test1 递减1

incrby test1 10 增加10

decrby test1 10 减10

setex test2 15 10 设置生命周期 15s

ttl test2 查看生命周期当为-2 表示已过期 -1表示永不过期

expire test 30 已有键值对 设置生命周期

mset key1 hello key2 world 批量设置

5.list数据类型

lpush guoqi a b c d 1 2 3 创建表 从左往右

lrange guoqi 0 -1 查看表 倒叙排序

lindex guoqi 0 打印第一个数

rpush guoqi1 1 2 3 4 创建表 从右往左

lrange guoqi1 0 -1

lrange guoqi1 1 2

lpushx guoqi1 10 添加10

rpushx guoqi1 10

rpop guoqi1 删除一个

llen guoqi1 查看长度

lset guoqi1 3 shuai 将下标为3的为shuai

linsert guoqi before shuai zd 在shuai前面插入一个za

lrem test2 3 1 删除3个为1的值

6.hash类型

hset guoqi2 tall yes

hget guoqi tall 查看一个字段

hset guoqi2 handsan yes 设置字段

hmget guoqi2 tall handsan 查看多个字段

hdel guoqi2 handsan tall 删除多个

hmset guoqi3 tall rich fangchanzheng yes age 23 多个字段

hmget guoqi3 tall fangchanzheng age 查看多个字段

hgetall guoqi3 直接查询所有

hkeys guoqi3 查看字段名称

hvals guoqi3 查看键对应的字段

del guoqi3 删除guoqi3

7.set数据类型

fushall 清除所有的当前类型

sadd myset a a c 创建 不能重复

smembers myset 查看 myset

sismember myset c 判断c是否存在1为有

sismember myset f 0为不存在

srandmember myset 随机选择一个查看

spop myset 删除

srem myset a e f 删除多个

8.有序集合

zadd myzset 1 one 创建 权重1 元素one

zadd myzset 2 two 3 three

zrange myzset 0 -1 withscores 查看

zrank myzset one 查看索引位置

zcard myzset 获取成员数量

zcount myzset 1 2 统计权重数量为 1-2

zrem myzset three 删除

zrange myzset 0 -1 withscores

zscore myzset two 查看权重