redis简介:
Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容;redis数据库是提供内存存储和持久化,由于是内存存储因此Redis可以在一秒内读写超过10万个键值,由于将数据存储在内存中,当程序退出后内存中的数据会丢失,因此redis提供了持久层,即可以将内存中的数据异步写入到硬盘中,同时又不影响提供服务。
redis支持的键值类型:
- 字符串类型:String
- 散列类型:map
- 列表类型:一个可从左或从右写入的队列,可以实现栈和队列 ,list
- 集合类型:set
- 有序集合类型:zset
redis功能丰富:
- 可以用作缓存、队列等系统中
- 可以为每个键设置生存时间(TTL--Time To Live)
- 可以基于redis支持“发布/订阅”的消息模式构建聊天室等系统(Redis贡献者之一Pieter Noordhuis 提供了一个用该模式开发的聊天室例子------https://gist.github.com/348262)
redis安装:
安装redis,大家可以百度,一大堆,一些大佬分享的特别不错
redis启动:
- 直接启动:直接运行redis-server即可,redis服务器默认会使用6379端口,启动命令 $redis-server (使用默认端口启动) $redis-server --port 6380 (指定端口启动)
- 通过初始化脚本启动:在Linux系统中可以通过初始化脚本启动redis,使redis可以随着系统自动运行,在redis源代码目录的utils文件夹中有一个redis_init_script的初始化脚本文件,并在初始化脚本中追加两行代码(橙色的部分),内容如下
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
- 然后我们需要配置redis的运行方式和持久化文件、日志文件的存储位置等,具体步骤如下:
- 配置初始化脚本:首先将初始化脚本复制到/etc/init.d目录中,文件名为 “redis_端口号”,然后修改脚本第6行的REDISPORT变量的值为同样的端口号。
- 创建需要的文件夹,即/etc/redis(存放redis配置文件)、/var/redis/端口号(存放redis的持久化文件)
- 修改配置文件:首先将配置文件模板(位于源代码目录的根目录中)复制到/etc/redis 目录中,以端口号命名(如“6379.conf”),然后按照下表其中的部分参数进行编辑配置。
daemonize | yes | 使redis以守护进程模式运行 |
pidfile | /var/run/redis_端口号.pid | 设置redis的PID文件位置 |
port | 端口号 | 设置redis监听的端口号 |
dir | /var/redis/端口号 | 设置持久化文件存放位置 |
到现在为止就可以使用 /etc/init.d/redis_端口号start来启动redis了,如果要跟随系统自启动还需要执行命令:$sudo update-rc.d redis_端口号 defaults (针对ubuntu操作系统),如果是centos操作系统,命令为chkconfig redis_端口号 no(这样就可以通过service redis_端口号 start 启动了)。
redis基本命令:
- 键值操作:
- 获取符合的键值:KEYS pattern (pattern支持glob风格通配符格式如下表所示)
? | 匹配一个字符 |
* | 匹配多个字符 |
[] | 匹配括号间的任一字符,可以使用“-”表示一个范围,如a[b-d]可以匹配“ab”、“ac”,“ad” |
\X | 匹配字符X,用于转义符号 |
- 判断一个键是否存在:EXISTS key (返回整型1为存在,返回0为不存在)
- 删除键:DEL key[key...] (可以删除一个或多个键,返回值是删除键的个数)
- 获取键值的数据类型:TYPE key
- 字符串类型存储:
- 赋值与取值:
- SET key value
- GET key (当键不存在时,返回结果为空)
- 扩展:
- 生成递增数字作为key:INCR key
- 获取value字符串长度:select key
- 散列类型存储:
- 赋值与取值:
- HSET key field value
- HSET key field
- HMSET key field value [field value ...]
- HMGET key field [field ...]
- HGETTALL key
- HEXISTS
-
- 例子:HSET car price 500,HSET car name BMW
- 扩展:散列类型相当于存储的是一个对象,如下表所示:
name | price |
BMW | 500 |
B | 1000 |
- 列表类型(至多2^32-1个字符串)
- 向列表两端增加元素
- LPUSH key value [value ...] (向左边增加)
- RPUSH key value [value ...] (向右边增加)
- 从列表两端弹出元素
- LPOP key (从左侧弹出一个元素)
- RPOP key (从右侧弹出一个元素)
- 获取列表中元素的个数
- LLEN key
- 删除列表指定的值
- LREM key count value
- 这里补充一点,Java是通过序列化对象列表实现redis整存整取的
- 集合类型(至多2^32-1个字符串)
- 增加/删除元素
- SADD key member[member ...]
- SREM key member[member ...]
- 获取集合中的所有元素
- SMEMBERS key
- 判断元素是否在集合中
- SISMEMBER key member
- 有序集合类型
- 增加元素
- ZADD key score member [score member ...]
- 获得元素的分数
- ZSCORE key member
- 获得排名在某个范围的元素列表
- ZRANGE key start stop [WITHSCORES]
- ZREVRANGE key start stop [WITHSCORES]
说明:当stop为-1时表示最后一个元素
4.获取指定分数范围的元素
1.ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 例如 ZRANGEBYSCORE scoreboard 80 (100 ,表示获取分数在80,100之间的同学,“(”表示不包含100
【未完待续】