Redis缓存技术(一)

2018-01-30 10:43:06来源:网络收集作者:咖啡不加糖人点击

分享
第七城市th7cn

为什么需要缓存
我们发现,首页加载时,需要查询的数据非常多:大广告、小广告、楼层、商品类目信息等等。
首页的访问量非常大,如果每次都访问后台接口,查询所有的数据,会大大增加数据加载所需的时间。
然而这些信息一般更新的频率比较低,短时间内不会发生改变。
因此,我们可以考虑在前台系统中,增加一层缓存,把这些数据缓存起来,请求到来时,不再查询后台接口,而是直接读取缓存中的数据。
这样就能大大减少首页加载所需时间,提高并发性能.
技术选型Redis和Memcached

两者有什么区别?
从性能来看:
redis:单线程,因此在大数据量的情况下,略逊色于Memcache
Memcache:多线程,性能强劲,但是在数据量不大时,优势不明显


从存储方式来看:
redis:支持数据持久化和主从备份。数据更安全,可以搭建集群
Memcache:数据存于内存,没有持久化功能


从数据结构来看:
redis:除了基本的k-v 结构外,支持多种复杂结构
Memcache:只支持基本k-v 结构


结论:
如果对持久化、数据结构和处理有复杂要求的,肯定使用Redis;如果仅仅是基本的key-value结构的基本get和set需求,建议使用memcache


redis特性

Redis缓存技术(一)


CentOS下设置自动启动
vim /etc/init.d/redis
#!/bin/sh
# chkconfig: 2345 90 10
# description:Redis is a persistent key-value database
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/src/redis-3.0.2/redis.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
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac
redis通用操作指令

1.keys命令:获取符合规则的键名列表


语法:keys pattern
示例:keys * (查询所有的键)

2.EXISTS指令:判断一个键是否存在,如果存在返回整数1,否则返回0


语法:EXISTS key

3.DEL:删除键,可以删除一个或多个键,返回值是删除的键的个数


语法:DEL key [key … ]

4.TYPE :Redis中支持的数据类型:string(字符串的key-value)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合)
使用type可以获取键值的数据类型。


语法:TYPE key [key …]
实例:
redis 127.0.0.1:6379> keys *
1) "username2"
redis 127.0.0.1:6379> type username2
string

5.HELP


help +tab 键
Redis字符串
1.概述
字符串结构,其实是Redis中最基础的K-V结构。其键和值都是字符串。类似Java的Map
2.常用命令:
序号 命令及描述
1SET key value :设置指定 key 的值
2GET key :获取指定 key 的值。
3GETRANGE key start end :返回 key 中字符串值的子字符
4INCR key:将 key 中储存的数字值增一。
5INCRBY key increment:将 key 所储存的值加上给定的增量值(increment) 。
6DECR key:将 key 中储存的数字值减一。
7DECRBY key decrement:key 所储存的值减去给定的减量值(decrement) 。
8APPEND key value:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
9STRLEN key:返回 key 所储存的字符串值的长度。
10 MGET key1 [key2..]:获取所有(一个或多个)给定 key 的值。
11 MSET key value [key value ...]:同时设置一个或多个 key-value 对。
3.基本语法:
set&get
SET key value设置指定 key 的值
GET key获取指定 key 的值。
127.0.0.1:6379> set name "lucy"
OK
127.0.0.1:6379> get name
"lucy"
127.0.0.1:6379>
INCR和INCRBY(数字自增)
INCR 命令将 key 中储存的数字值增一。
语法:INCR keyName
返回值:执行INCR命令后key 的值

示例1: 当key没有值时:(先初始化为0,再+1)


127.0.0.1:6379> get id
(nil)
127.0.0.1:6379> incr id
(integer) 1
127.0.0.1:6379> get id
"1"

示例2 :当key有值,并且也是数值:(直接值+1)


127.0.0.1:6379> set numb 100
OK
127.0.0.1:6379> get numb
"100"
127.0.0.1:6379> incr numb
(integer) 101
127.0.0.1:6379> get numb
"101"

示例3: 当key有值,但是不是数值形式:(会报错)


127.0.0.1:6379> get name
"lucy"
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
注意:

1)如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
2)如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
3)数字值在Redis中以字符串保存


INCRBY
INCRBY与INCR命令基本类似, INCRBY命令将 key 中储存的数字加上指定的增量值。
语法: INCRBY key_name incr_amount
127.0.0.1:6379> get id
"1"
127.0.0.1:6379> incrby id 10
(integer) 11
127.0.0.1:6379> get id
"11"
DECR和DECRBY(数值自减)
Decr 命令将 key 中储存的数字值减一。
语法:DECR key_name
注意:

1)如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
2)如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
3)数字值在Redis中以字符串保存


APPEND(追加数据)
Append 命令用于为指定的 key 追加值。
1)如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
2)如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
语法: APPEND key value
示例1:对一个不存在的数据进行操作
127.0.0.1:6379> get msg
(nil)
127.0.0.1:6379> append msg hello
(integer) 5

示例2:操作一个已经有值的key


127.0.0.1:6379> get name
"lucy"
127.0.0.1:6379> append name jack
(integer) 8

STRLEN(字符串长度)
Strlen 命令用于获取指定 key 所储存的字符串值的长度。
语法:STRLEN key
返回值:key的值字符串长度,如果key不存在,返回0


MSET&MGET(批量添加和获取)
Mset 命令用于同时设置一个或多个 key-value 对。
语法:MSET key1 value1 key2 value2 … keyN valueN
Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil
语法:MGET KEY1 KEY2 .. KEYN



第七城市th7cn

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台