一、Redis基础
1、简介
remote dictionary server 远程字典服务
C语言编写,基于内存,可持久化的日志型key value数据库。
他会周期性将更新的数据写入磁盘或把修改操作追加到记录文件,且在此基础上实现了主从同步。
2、redis能干嘛
内存存储,持久化,内存中是断电及失,所以持久化很重要(rdb/aof)
效率高,用于高速缓存
发布订阅系统
地图信息分析
3、redis特性
持久化
多样数据类型
集群
事务
4、linux安装
1、下载压缩包
wget url
2、复制压缩包到opt目录下
mv reids-6.0.7.tar.gz /opt
3、切换到/opt下并解压redis
cd /opttar -zxvf reids-6.0.7.tar.gz
4、c环境安装
yum install gcc-c++#查看本版,版本过低后续安装会报错gcc -v
5、安装redis
cd /opt/reids-6.0.7#gcc版本过低make会失败make#确认是否安装成功make install
6、拷贝redis.conf文件到redis安装路径下
# /usr/local/bin为redis默认安装路径,make成功后该路径下会有reids的客户端cd /usr/local/bin#创建目录存放conf文件mkdir rconfig#复制conf文件到rconfig目录cp /opt/redis-6.0.7/redis.conf rconfig
7、修改conf文件
vim rconf/redis.conf#deamonize no 改为 yes#bind 127.0.0.1 改为 0.0.0.0
8、启动redis
cd /usr/local/bin#开启redis服务reids-server rconfig/redis.conf
9、连接测试
#连接redis 默认端口6379 也可以省略redis-cli -p 6379127.0.0.1:6379> ping #连接测试PONG #连接成功127.0.0.1:6379> set key value 127.0.0.1:6379> get key #获取指定key的值127.0.0.1:6379> keys * #获取所有的key127.0.0.1:6379> shutdown #关闭redis....> exit #退出连接
查看redis进程是否开启
ps -ef| grep redis
5、Redis基本知识
开启redis--------
#/usr/local/bin下 rconfig为自定义的文件夹存放redis.confredis-server rconfig/redis.conf
连接redis
#本机可省略-h; port为6379也可省略-predis-cli -h ip -p port
redis默认有16个数据库,默认使用第一个数据库
# 切换数据库 index从0-15127.0.0.1:6379> select index#当前数据库使用大小127.0.0.1:6379> dbsize#清空当前数据库127.0.0.1:6379> flushdb#清空所有数据库127.0.0.1:6379> flushall
redis端口为什么是6379
merz(女明星)九宫格对应数字
redis是单线程的,redis是纯内存数据库,一般都是简单的存取操作
为什么redis单线程还这么快
多线程会产生cpu上下文切换,消耗资源;
redis全程使用hash结构,读取速度快;
基本命令
命令 | 解释 |
---|---|
EXISTS key [key ...] | key是否存在 |
expire key seconds | 设置过期时间 |
ttl key | 查看key过期剩余时间 |
move key db | 迁移key |
del key | 移除key |
type key | 查看当前key类型 |
6、redis常见数据类型
基本数据类型:
string、list、set、hash、zset(sorted set)
特殊数据类型
Geospatial地理位置、hyperloglog计数统计算法、bitmaps位存储
6.1 String(字符串)
操作 | 命令 |
---|---|
字符串追加 | append key value |
获取长度 | strlen key |
key加一(递增)(计数器) | incr key |
key减一(递减) | decr key |
设置key增长量 | incrby key increment |
设置key减少量 | decrby key decremen |
获取字符串指定范围内容 | getrange key start end |
获取全部 | getrange key 0 -1 |
字符串内容替换(指定位置开始替换) | setrange key offset value |
将值 value 关联到 key ,并设置过期时间 | setex key seconds value |
key不存在再设置(分布式锁常用) | setnx key value |
批量set | mset key value [key value ...] |
批量get | mget key [key ...] |
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在(原子性) | msetnx key value [key value ...] |
将给定 key 的值设为 value ,并返回 key 的旧值 | getset key value |
string存对象
#1、设置user:1对象,值为Json保存set user:1 {name:xls,age=23}#2、属性存入key,方便获取,不用解析json(与hash类似)mset user:1:name xls user:1:age 23
6.2 list(列表)
Redis中list可以当成栈、队列、阻塞队列
所有的list命令都是以L开头
常用命令:
lpush key element [element ...] | 向list中存值(列表头部插入) |
---|---|
lrange key start stop | 获取list数据(0 -1全部) |
Rpush key element [element ...] | 向列表尾部插值 |
Lpop key | 左移除(移除列表第一个元素) |
Rpop key | 右移除(移除列表最后一个元素) |
Lindex key index | 通过下标获取值 |
Llen key | 返回列表长度 |
Lrem key count value | 移除指定个数的value |
Ltrim key start stop | 截取列表 |
Rpoplpush source destination | 移除列表最后一个元素,并放入新的列表 |
Lset key index element | 向列表中指定下标替换(列表必须存在,下标必须存在) |
Linsert key before/after pirot value | 向列表指定值前/后插入新的值 |
list实际是个链表,left、right都可插入
消息队列:走进右拿 lpush Rpop
栈:左进左拿 lpush lpop