redis是一个开源的, 内存数据结构存储, 一般用来作为数据库,缓存和消息代理.
Redis的优势
多种数据结构
- 字符类型String
- 散列类型Hash
- 列表类型List
- 集合类型Set
- 有序集合类型SortedSet
功能丰富
- 超时时间设置
- 可以通过列表类型来实现分布式队列
- pub/sub 消息模式
简单
- 多种操作命令
Redis应用场景
- 缓存
- 秒杀,抢购等
- 单点登陆, 分布式session等
- 网站访问排名
- 消息队列
安装
- 手工下载或通过
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
tar xzf redis-5.0.4.tar.gz
cd redis-5.0.4
make
缺少make包, 则需要通过
sudo apt-get install make
安装
make报错
/bin/sh: cc: command not found
缺少gcc包, 通过sudo apt-get install gcc
如果报错
fatal error: jemalloc/jemalloc.h: No such file or directory
则使用make MALLOC=libc
编译
可以使用命令
make test
测试. 报错You need tcl 8.5 or newer in order to run the Redis test
则需要安装tcl包.
安装方法如下:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
sudo ./configure
sudo make
sudo make install
安装完成后运行make test
命令成功.
- 需要安装到指定目录, 则可以使用
make install PREFIX=/mnt/d/redis
注意添加配置文件
启动命令
- 启动
sh /redis-server ../conf/redis.conf
以后台进程的方式启动需要修改redis.conf
文件的daemonize=yes
- 客户端连接
sh /redis-cli -h 192.168.1.123 -p 6379
配置文件中的
bind
用来绑定服务端的ip, 为了安全,默认不允许外网访问
默认保护模式protect-mode=yes
多数据支持
默认支持16个数据库, databases=16
, 默认使用的是DB 0 . redis数据库不支持自定义名称, 且不能单独做授权, 各个数据库之间并非完全隔离. flushall
命令可以清空redis中所有的数据.
select 3
转到索引为3的数据库
使用命令
-
keys prifix*
查找到所有开头为prifix的键,pattern
可以使用[? * [] ]匹配 -
EXISTS key
是否存key -
type key
获取数据结构
字符类型
key的最大存储为512M.
-
set key value
比较重要的setnx
get key
-
incr key
递增值incrby key [step]
递增指定的step -
strlen key
获得长度 -
mget key1 key2 key3
批量获取多个key的值 -
set key1 value1 key2 value2
批量设置多个键值
key的设计可以参看阿里的规范, 例如
业务名:表名:id
列表类型
-
lpush key value
左边push数据,对应的是rpush
-
lpop key
获取数据, 同时数据被移除,对应的是rpop
-
llen key
列表长度 -
lrange key start stop
获取片段, start=-1 表示从头,stop=-1表示到结尾 -
lrem key count value
删除 -
lset key index value
设置索引的值
散列类型
不支持数据类型嵌套, 比如hash中存储一个list.
-
hset key field value
设置 -
hget key field
获取 -
hmset key field1 value1 field2 value2
设置多个值 hmget key field1 field2
-
hgetall key
获取全部信息, 包括key,value -
hexists key field
判断是否存在 hincryby
hsetnx
-
hdel key field
删除一个或多个字段
集合类型
和list相比, 不能有重复元素, 且是无序的
-
sadd key member...
设置一个或多个元素, 返回增加的数量 -
smembers key
获取元素 -
sdiff key1 key2
差集计算 -
sunion key1 key2
并集计算
有序集合
-
zadd key score member
增加元素 -
zrange key start stop withscores
获取片段 withscores 用来获取分数
可以用来做排名统计.
redis的事务
比较鸡肋, 不建议使用, 有时候不能回滚
multi
开启事务;set get...
等操作为具体的事务操作exec
提交事务
过期时间
expire key timeout
设置超时时间ttl key
获得key过期时间
发布订阅
publish channel message
subscribe channel
分布式锁
可使用setnx
实现.