redis初识

1、前置知识

磁盘知识:寻址:ms

     宽带:G/M

内存:寻址:ns

          带宽:很大

秒 > 毫秒 > 微秒 > 纳秒

内存寻址比硬盘寻址快10w倍

折中做法:

  将内存种的一部分数据做缓存

  memcached

  key value结构,value没有类型的概念

  redis(秒级十万操作)

  同为key value结构,value有类型,string(字符,数值,bitmaps),hashes,lists,sets,sorted sets

2、安装

//下载
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
//解压
tar -xf redis-5.0.5.tar.gz
//安装
make
make install PREDIX=/opt/redis
//修改环境变量
vim /etc/profile
export REDIS_HOME:/opt/redis
export PATH:.$PATH:REDIS_HOME/bin
//安装服务,按脚本填写配置,自动生成脚本文件在/etc/redis/6379
cd utils
./install_server.sh 

3、处理流程

linux系统种存在kernel(内核),epoll是一种系统调用,redis是单进程单线程单实例并发很多的请求,为什么并发那么多。调用了系统内核的epoll

epoll概念

文件描述符从block(阻塞)发展到noblock(非阻塞的),这时为同步非阻塞时期

此时发展出一个问题,用户进程轮询调用1000次kernel,成本问题

这时发展出了select概念

统一把这一千个文件描述符传给select,多路复用nio,减少了内核态和用户态的切换

这些所有的功能都是由jvm实现的,jvm由c编写

4、关于linux用户态和内核态(待完善)

问题:文件描述符相关数据拷来拷去成为累赘

内核有内核的空间,用户有用户的空间,所以伸展出一个内核和用户的共享空间

共享空间由红黑树+链表+mmap实现

5、实际操作

 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 
 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

String:

select db //选择数据库(0-20)

set k v //设置一个数据

set k1 v nx //nx仅仅可以新建的时候进行插入数据

set k2 v xx //xx仅仅可以更新的时候进行更新数据

mset k1 v1 k2 v2 //可以进行设置多个值

get k //返回一个v,没有返回nil

mget k1 k2 k3 // 获取多个v

getrange k start end  //获取一个索引从start到end,双闭合的区间

setrange k start value //更新区间范围,我们可以从start的索引开始,更新value数据

del key //删除一条kv数据

keys pattern //用正则查询key

flushdb //清空db

help @string //查询string相关帮助信息

append k v //给k的数据进行追加v这个数据

type k //查看value是什么类型

object encoding k //查看v的数据类型

incr k1 //将integer的数据类型加一

incrby k1 v //将integer数据类型加v

decr k1 //将integer的数据类型减一

decrby k1 v //将integer数据类型减v

incrbyfloat k1 v //将integer数据类型加一个浮点型

//数据不够长的时候编码是embstr,之后会变为raw格式

strlen k1 //查看v的长度

redis-cli --raw //进行进入,会识别编码(比如自动识别GBK)

getset k1 v //更新新值,返回旧值

bitpos key bit start //查看从start到end的字节,第一次bit出现的位置

bitcount key start //查看start到end的时候,1出现的次数

bitop and andkey k1 k2 //执行k1 k2 按位与操作

bitop or orkey k1 k2 //按位或操作

list:

//lpush、lpop、rpush、rpop 和栈一样

lrange 0 -1 //所有元素查看

lindex key index //查看索引位置的值

lrem key count value //移除count数量的value

linsert key after afval value //在键后面插入值

linsert key before befval value //在key前面插入值

blpop //阻塞式取值(等待有值再取出)

ltrim key start //修剪,进行修剪队列

  

hash:

hset key filed value //设置一个key field的值

hget key field //获得一个key field的值

hmset key field value field value //设置多个field的值

hmget key field fied //获取多个field的值

hkeys key //查看所有的key

hvals key //查看所有的field

hincrby key field num //增加num值

  

set:

sadd key v1 v2 v3... //插入v1,v2,v3...

smember key// 列出所有的value

srem v1 v2 //删除v1,v2...

sinter k1 k2 //求交集并返回

sinterstore dest k1 k2 //交集结果存储dest

sunion k1 k2 //求并集返回

sunionstore dest k1 k2 //并集存储dest

sdiff k1 k2 //求差集并返回

sdiffstore dest k1 k2 //求差集存储dest

srandmember k1 //随机返回一个成员

srandmember k1 num //随机返回num个元素,num为正数,取出一个去重结果集,如果为负数,那么取出不去重结果集

  

zset:

- zadd k score mem score mem //插入数据后增加权重
- zrange k 0 -1 //取出所有的值
- zrangebyscore k low high //取出从low到high区间的数据
- zrange k start end //从start到end之间的数据取出
- zscore k v //返回一个数据的分值
- zscore k  v //返回一个数据的排行
- zrange k 0 -1 withscores //携带分数取出
- zincrby k incrscore v //增加一个值的分值
- zunionstore k keynum k1 k2..[aggregate max] //多个key的并集[最大值]

  

原文地址:https://www.cnblogs.com/dagreentree/p/13371084.html