Redis是个内存数据库,同时它是单线程的。
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
1 windows安装
启动 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe或者打开安装目录直接点击运行redis-server.exe (使用过程中不要关闭)。
另外 启动 一个cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-cli.exe -h localhost -p 6379 或者直接点击运行redis-cli.exe文件。
2 Redis 配置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。
可以通过 config 命令查看或设置配置项。
如获取最大连接数: config get maxclients
3 Redis命令
连接本地服务器
$redis-cli
连接远程服务器
$ redis-cli -h host -p port -a password
测试是否连接成功
$ping
4 Java 使用 Redis
import redis.clients.jedis.Jedis;
public class RedisInJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
//查看服务是否运行
System.out.println("Server is running: "+jedis.ping());
}
}
输出如下结果:
Server is running: PONG
测试连接成功。
5 Redis 键(key)
基本命令:
DEL key 该命令用于在 key 存在时删除 key。
DUMP key 序列化给定 key ,并返回被序列化的值。
EXISTS key 检查给定 key 是否存在。
EXPIRE key seconds为给定 key 设置过期时间。
EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。
PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
KEYS pattern 查找所有符合给定模式( pattern)的 key 。
MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
PERSIST key 移除 key 的过期时间,key 将持久保持。
PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
RANDOMKEY 从当前数据库中随机返回一个 key 。
RENAME key newkey 修改 key 的名称
RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
TYPE key 返回 key 所储存的值的类型。
Java示例
public class KeyRedisApp {
public static void main(String[] args) {
Jedis jedis = JedisUtil.getInstance().getJedis();
System.out.println("Server is running: "+jedis.ping());
//KEYS pattern
System.out.println("KEYS:"+jedis.keys("*key*"));
//RENAME key newkey
jedis.rename("runoobkey", "runoobkeynew");
System.out.println("RENAME:"+jedis.keys("*key*"));
//TYPE key
System.out.println("KEYS:"+jedis.type("hkey2"));
}
}
6 Redis 注意事项
掌控储存在Redis中的所有键
删除一些不在使用的数据。
控制所有键名的长度
键名在标识数据的同时,注意键名长度。
使用合适的数据结构
1)对于数量较大(成千上百万),建议使用哈希将数据分组存储,因为哈希表效率高,占用内存小。
2) 如果不需要使用set特性时,使用list替代set,因为list使用内存更小,且速度更快。
3)Sorted sets是最昂贵的数据结构,不太建议使用,使用哈希表替换。
4)考虑使用bitmaps或者bitsets,它们允许你在Redis值上执行多个bit-level操作。
使用SCAN时别使用键
SCAN 命令是一个基于游标的迭代器。SCAN 命令每次被调用之后, 都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。同时,使用SCAN,用户还可以使用keyname模式和count选项对命令进行调整。对比KEYS命令,虽然SCAN无法一次性返回所有匹配结果,但是却规避了阻塞系统这个高风险,从而也让一些操作可以放在主节点上执行。
SCAN相关命令还包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分别用于集合、哈希键及有续集等。