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.2 redis为什么这么快?
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 查看权重