Redis学习

Redis学习

下载与安装

点击这里跳转到windows版下载地址
官方网站请点击

文件介绍

redis-server

Redis服务器的daemon启动程序

redis-cli

Redis命令行操作工具

redis-benchmark

Redis性能测试工具

redis-check-aof

更新日志检查

启动Redis

redis-server redis.windows.conf

Redis服务相关操作

设为服务后可开机启动,不用每次都手动启动Redis

设为服务

cmd窗口已关闭redis就会关闭,所以需要我们将其设为服务才会后台运行

redis-server --service-install redis.windows-service.conf --loglevel verbose

卸载服务

redis-server --service-uninstall

开启服务

redis-server --service-start

停止服务

redis-server --service-stop

测试

redis-cli.exe -h 127.0.0.1 -p 6379

存入数据

set userinfo zhangsan

读取数据

get userinfo

如果有获取到zhangsan这条数据,那么就说嘛安装环节完成

配置

查看配置

config get *

编辑配置

config set xxx yyy

配置说明


#绑定主机地址
bind 127.0.0.1

#是否作为守护进程运行
protected-mode yes

#Redis默认监听端口
port 6379

tcp-backlog 511

#当客户端闲置多长时间后关闭连接.如果为0,则表示关闭此功能
timeout 0

#
tcp-keepalive 0

#日志级别。Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice

#日志文件
logfile "server_log.txt"

#
syslog-enabled yes

#
syslog-ident redis

#设置数据库的数量,默认数据库为0.可以使用SELECT <dbid>命令在连接上指定数据库id
databases 16

#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件。可以多个条件配合
此处表示当有一条keys数据被改变时,900秒刷新到disk一次
save 900 1

##
stop-writes-on-bgsave-error yes

#指定存储至本地数据库时是否压缩数据,默认为yes<br />Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes

rdbchecksum yes

#指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb

#指定本地数据库存放目录
dir ./

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

#指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no

#指定更新日志文件名,默认为appendonly.aof
appendfilename "appendonly.aof"

#指定更新日志条件,共有3个可选值: 
#no:表示等操作系统进行数据缓存同步到磁盘(快) 
#always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
#everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

# 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

#指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

Redis日志

查看日志级别

config get loglevel

数据类型

Redis支持5中数据类型

字符串(string)

说明

Redis中的字符串是一个字节序列,是二进制安全的,所以不会由任何特殊字符而终止,一次,Redis中的字符串可以存储高达512M的内容

相关命令
赋值
set var value

取值
get var 

散列/哈希(hash)

说明

Redis中的散列/哈希是键值对的集合

Redis散列/哈希是字符串字段和字符串值之间的映射
因此,它们用于表示对象

每个散列/哈希可以存储多达2^32 - 1个健-值对(超过40亿个)

命令
赋值单个field
hset key field value

同时赋值多个field
hmset key field value [field value...]

取单个field
hget key field

取多个field值
hmget key field [field...]

hincrby key field integer

检测field是否存在
hexists key field

删除指定field
hdel keys field

获取key的field数量
hlen key

获取key的所有field
hkeys key

获取key的所有field值
hvals key

返回key的所有field和值
hgetall

列表(list)

Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素。

列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。

命令
赋值
lpush key value

取值语法,获取列表指定范围内的数据
lrange key start end

集合(set)

说明

字符串无序集合,不可重复,唯一性

一个集合中的最大成员数量为2^32 - 1(即4294967295,每个集合中元素数量可达40亿个)个。

命令
赋值
sadd key value

取值语法,获取集合内容列表
smembers key

可排序集合(zset)

说明

类似于集合,内容不可重复,但是有一个可重复的分数值,用来排序

命令
赋值
zadd key score value

取值语法(获取元素)
zrange key start end

取值语法(获取索引值)
key 变量
start 开始索引
end 结束索引
withscores 可选,递增
zrangebyscore key start end [withscores]

返回成员的排名
zrevrank

删除指定score的元素
zremrangebyscore

删除指定排名区间的元素
zremrangebyrank

Redis事务(不完整有待补充)

输入multi命令后返回OK表示已经开始事务数据

每次键入一条指令后并不会立即执行指令,而是会返回QUEUED表示已加入事务队列

使用exec命令后结束事务语句并执行事务队列中的所有指令

Redis命令

Redis命令不区分大小写

检查Redis服务器是否正在运行
ping

链接Redis服务器
redis-cli -h host -p port -a password

返回变量是否存在
existst key

此命令返回存储在指定键的值的序列化版本
DUMP key

返回变量数据类型
type key 

更改键的名称,如果newkey存在,则覆盖,成功返回ok
rename key newkey

更改键的名称,如果newkey存在,则表示失败,返回0;操作成功返回1
renamenx key newkey

获取键到期的剩余时间(单位为毫秒)
pttl key

获取一个随机的键
randomkey

删除指定键的过期时间,使其永久
persist key

将键移动到另一个数据库
move key db

查找与指定模式匹配的所有键(例如keys *)
keys pattern

设置键的到期时间(以毫秒为单位)
pexpire key milliseconds

以Unix时间戳形式来设置键的到期时间(以毫秒为单位) 
pexpireat key milliseconds-timestamp

设置键在指定时间秒数之后到期/过期
expire key seconds

设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式
expireat key timestamp

获取记录条数
dbsize

退出链接
quit

服务器基本信息
info

实时转存收到的请求
monitor

清空当前数据库
flushdb

清空所有数据库
flushall

删除key
del key [key ...]

JavaRedis

pom文件

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

如果不是使用maven管理包则需要一个依赖包commons-pool2

连接测试

public void redisTest() {
	// 连接本地的 Redis 服务
	Jedis jedis = new Jedis("localhost");
	System.out.println("连接本地的 Redis 服务成功!");
	// 查看服务是否运行
	System.out.println("服务 正在运行: " + jedis.ping());
	//关闭Jedis连接
	jedis.close();
}

存取Javabean

存取Javabean需要将Javabean序列化或者Json化,亦或者将对象与xml互转(未测试)

相关代码
测试Javabean
package demo;

import java.io.Serializable;

public class User implements Serializable {

	private static final long serialVersionUID = -5574967491708064809L;

	public User() {
		super();
	}

	public User(int id, String userName, String address) {
		super();
		this.id = id;
		this.userName = userName;
		this.address = address;
	}

	private int id;
	private String userName;
	private String address;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}
测试代码-序列化
// 实例化Redis
Jedis jedis = new Jedis();
// 存储
User user = new User(10000, "马化腾", "深圳市");
User user2 = new User(10001, "马云", "杭州市");
jedis.set("user1".getBytes(), SerializeUtil.serialize(user));
jedis.set("user2".getBytes(), SerializeUtil.serialize(user2));
// 读取
User usera = (User) SerializeUtil.unserialize(jedis.get("user1".getBytes()));
System.out.println(usera.getUserName());
// 关闭Redis
jedis.close();
测试代码-json化

适合字段少、数据少的情况,因为json化会消耗大量资源

pom

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.31</version>
</dependency>

demo

// 实例化Redis
Jedis jedis = new Jedis();
// 存储
User user = new User(10000, "马化腾", "深圳市");
User user2 = new User(10001, "马云", "杭州市");
jedis.lpush("user", JSON.toJSON(user).toString());
jedis.lpush("user", JSON.toJSON(user2).toString());
//读取
List<String> strs = jedis.lrange("user", 0, 10);
for (String string : strs) {
	JSON json = JSON.parseObject(string);
	User demoUser = JSON.toJavaObject(json, User.class);
	System.out.println(demoUser.getUserName());
}
// 关闭Redis
jedis.close();
原文地址:https://www.cnblogs.com/vmask/p/6681590.html