Redis配置、基本语法以及原理

Redis配置和使用:

地址:https://github.com/MSOpenTech/redis/releases

下载后解压即可,可以把解压后的文件目录放到环境变量中。

以windows系统为例,运行redis

cmd——>目录/redis-server.exe redis.windows.conf

获取配置信息:

cmd——>目录/redis-cl –h 127.0.0.1 –p 6379(-h指定地址,-p指定端口,-a指定密码,默认127.0.0.1:6379)

再执行CONFIG GET *,将获得所有的配置信息


redisObject

redis内部使用redisObject对象来表示所有的数据,该对象包含了数据的类型,编码方式以及其他一些重要的信息

String

String一共有三种编码,分别为int、embstr、raw,分别对应int的底层是long类型的整数,而其他两种编码则是字符串类型,embstr用于保存长度较小的串且不可改写,任何的修改都是将其转换成raw后进行的

格式:set key value[EX s][PX ms] [NX|XX]

key :键若该键已存在,则覆盖value

value:值

EX:过期时间,单位s

PX:过期时间,单位ms

NX | XX:前者不更新只添加,后者只更新不添加

Hash

可以看作一个键值对的集合,其中键为String类型。

Hash有两种编码,ziplist或hashtable

ziplist:用于数量少且数据小的情况

hashtable:实际上使用了两张表来管理数据,一张表为主表,用于存放数据,另外一张表用于rehashing时临时保存数据

插入:hmset key field value [field value…]

查询:hget key field

key:集合名

field:其中存储的键值对的键

value:对应前一个键的值

一个Hash可以存储2^32-1个键值对

List

字符串列表,依照插入顺序排列

List有两种编码,ziplist或linkedlist

ziplist:一种压缩链表,用于储存连续的较小数据

linkedlist:类似于java中的LinedList,也是一种双链表的实现,每次新增数据都需要申请分配一块内存

插入:lpush key value[value]

查询:lrange key startstop

key:列表名

value:表中的值,可以有多个

start / stop:起始索引(0开始) / 终止索引

一个List可以存储2^32-1个元素

Set

无序String集合,通过散列存储,不允许重复元素

Set有两种编码,hashtable或intset

intset:整数集合,且是有序的

插入:sadd key member[members…] 返回插入成功的成员数量

查询:smembers key

key:集合名

member:元素

最大成员数量2^32-1

Zset

类似于Set,同样不允许重复,但会为每一个member设置一个double类型的score,通过double进行排序

Zset有两种编码:ziplist或skiplist+hashtable

skiplist:一种跳跃表结构,至于跳跃表的具体原理以及实现参照:

https://blog.csdn.net/u014427196/article/details/52454462

https://www.cnblogs.com/George1994/p/7635731.html

skiplist保证了数据的有序性,而hashtable保证了操作的效率

插入:zadd key[NX|XX] [CH] [INCR] score member [score member…]

查询   1:zrange key startstop

          2、zrangebyscore key min max

key:集合名

NX | XX:前者不更新不添加,后者只更新不添加

CH:修改返回值为发生变化的成员总数,默认是返回新增的成员总数

INCR:对成员的分数进行递增操作

数据保存

RDB方式保存数据:

获取保存数据的目录:config get dir

若需要更改目录:config set dir xxxxxx

需要保存时执行SAVE (BGSAVE,异步保存),即在dir目录下生成dump.rdb,该转储文件可以修改默认文件名

恢复数据只需要将对应的rbd文件放到dir下,启动服务即可

相关参数:

save 900 1
save 300 10

save 60 10000

save X Y 意为若X秒内发生了Y次更新,则进行一次持久化

AOF方式保存数据:

启用/关闭AOF方式:

appendonly yes/no

每次更新后保存一次:

appendfsync always

每秒更新一次:

appendfsync everysec

从不更新,由操作系统控制:

appendfsync no

采用AOF方式,设置每秒更新一次,其安全性比RBD方式更好,若发生了意外情况最多也只丢失一秒的数据


Redis事务管理

windows系统下启动命令行连接到redis服务器。

四个常用命令:
multi、exec、discard、watch

multi:开始一个事务,redis进入事务状态

exec:执行multi后到exec前所有进入队列的事务

discard:取消事务,当前事务队列中的所有事务均不会得到执行,并退出事务环境

watch:redis中的一种乐观锁机制,当Client1中开始了一个事务,并对keyA进行了修改,但在执行前Client2修改了keyA,那么Client1的事务将不会执行




发布和订阅

redis对该功能有一个非常简单的实现,订阅频道的命令为:

subscribe channel  [channel...]

channel:任意合法的频道名称,无需事先注册

推送信息:

publish channel message

返回接收到此信息的客户端数量

Java对Redis的支持

需要提供支持的包,下载地址:https://mvnrepository.com/artifact/redis.clients/jedis

初始化:

 
 
public Jedis(String host)
public Jedis(String host, int port)


初始化的方法非常多,这里不再作记录。

Jedis库保留了Redis原生了语法风格,以下是一些主要的方法:

删除:

 
 
public Long del(String... keys)


String:

    public String set(String key, String value)
public String set(String key, String value, String nxxx, String expx, long time)
public String get(String key)

 

Hash:

 
 
public Long hset(String key, String field, String value)
public String hmset(String key, Map<String,String> hash)
 
public List<String> hmget(String key, String... fields)
public String hget(String key, String field)
 
public Long hdel(String key, String... fields)


List:

 
 
public Long lpush(String key, String... strings)
 
public List<String> lrange(String key, long start, long end)
 
public String lpop(String key)


Set:

 
 
public Long sadd(String key, String... members)
 
public java.util.Set<String> smembers(String key)
 
public Long srem(String key, String... members)


 

 

Zset:

 
 
public Long zadd(String key, double score, String member)
public Long zadd(String key, Map<String, Double> scoreMembers)
 
public Set<String> zrange(String key, long start, long end)
public Set<String> zrangeByScore(String key, double min, double max)
 
public Long zrem(String key, String... members)


 


猜你喜欢

转载自blog.csdn.net/my_dearest_/article/details/80189532