Redis是一款非常流行的NoSql数据库
非关系型数据库:
monogoDB redis。
安装:
cd redis
make && make install
修改config
#bind 127.0.0.1 # 将这行代码注释,监听所有的ip地址,外网可以访问
protected-mode no # 把yes改成no,允许外网访问
daemonize yes # 把no改成yes,后台运行
开机启动
命名新文件redis文件放到/etc/init.d/下,
#!/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="/home/leyou/redis/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
设置权限
chmod 755 /etc/init.d/redis
启动
chkconfig --add /etc/init.d/redis
chkconfig redis on
redis-server redis.conf
Redis命令行指令
主要包括
- @generic:通用命令
- @string:字符串类型命令
- @list:队列结构命令
- @set:set结构命令
- @sorted_set:可排序的set结构命令
- @hash:hash命令
除了generic,其他为常用的物种数据类型 - string等同于java中的,
Map<String,String>
- list 等同于hava中的,
Map<String,List<String>>
- set等同于java中的,
Map<String,Set<String>>
- sort_set:可排序的set
- hash等同于java中的,
Map<String,Map<String,String>>
通用指令
keys : 查询符合规则的键名列表
示例 keys * 查询所有键
生产环境应禁用
exists:判断键是否存在
存在返回1,不存在返还0
del:删除某个键
select 切换库,默认16个库【0-15】 select 2
expire 设置key的过期时间 expire name 2000 单位秒,默认是无限时长
PERSIST永久存活
TTL:查看一个键的过期时间 TTL name ,-2代表死亡,-1代表未设置时长
字符串指令
最基础的kv结构
SET key value设置键值
GET key 获取指定键的值
GETRANGE key start end 返回key中字符串值的字字符
INCR:自增长
DECR:自减
MSET k1 v1 k2 v2 k3 v3… 批量增加
MGET k1 k2 k3 … 批量查询
hash结构
主键key就叫key hash的key叫hKey,hValue
hset 哈希存,hset key hKey hValue
hget 哈希取,hget key hKey
hgetall 哈希全取 hgetall key
hkeys hkeys key,返回这个hashkey中所有的hkeys
hvalues hkeys key,返回这个hashkey中所有的hvalue
hdel hdel key hkey 删除指定字段,而del会删除整个key
Spring整合Redis
1.SpringDataRedis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.设置host。
3.操作
RedisTemplate为泛型,可以指定k-v类型后,存放的时候自动转换成字节存入redis,底层使用jdk序列化,可读性比较差。推荐使用StringRedisTemplate
redisTemplate里面有几个关键方法
对应Redis五种数据类型,拿到之后可以对响应数据结构的数据进行操作
采用单例模式,可以直接链式编程
redisTemplate.bound*传入key,可以直接操作对应key的所有操作。
通用指令就在redisTemplate中
使用中发现保存hashkey的时候 key值前面出现“\xac\xed\x00\x05t\x00\tb”
,这是由于redisTemplate 默认的序列化方式为 jdkSerializeable。
注入以下bean即可解决
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}