redis

package module
v0.1.9-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2019 License: MIT Imports: 11 Imported by: 2

README

fastredis

Experimental Redis client for Go

Documentation

Index

Constants

View Source
const ErrIteratorClosed = Err("Iterator closed")

ErrIteratorClosed occurs when an iterator is used after Close()

Variables

This section is empty.

Functions

func BlankReply

func BlankReply() *resp.Reply

BlankReply returns a blank reply from the pool

func ReleasePipeline

func ReleasePipeline(p *Pipeline)

ReleasePipeline resets and returns the pipeline to the pool

func ReleaseReply

func ReleaseReply(r *resp.Reply)

ReleaseReply resets and returns a Reply to the pool.

Types

type Conn

type Conn struct {
	// contains filtered or unexported fields
}

Conn is a connectio to a Redis server

func Dial

func Dial(addr string, options ConnOptions) (*Conn, error)

Dial opens a connection to a redis server

func (*Conn) Auth

func (c *Conn) Auth(password string) error

Auth authenticates a connection to the server

func (*Conn) Close

func (c *Conn) Close() error

Close closes a connection

func (*Conn) Do

func (c *Conn) Do(pipeline *Pipeline, reply *resp.Reply) (err error)

Do executes pipeline reading responses into reply

func (*Conn) LoadScript

func (c *Conn) LoadScript(src string) (sha1 string, err error)

LoadScript loads a Lua script

func (*Conn) Ping

func (c *Conn) Ping() error

Ping performs a PING to the server

func (*Conn) PopLeft

func (c *Conn) PopLeft(timeout time.Duration, key string, keys ...string) (k, v string, err error)

PopLeft executes the blocking BLPOP command

func (*Conn) PopMax

func (c *Conn) PopMax(timeout time.Duration, key string, keys ...string) (k, v string, score float64, err error)

PopMax executes the blocking BZPOPMAX command

func (*Conn) PopMin

func (c *Conn) PopMin(timeout time.Duration, key string, keys ...string) (k, v string, score float64, err error)

PopMin executes the blocking BZPOPMIN command

func (*Conn) PopPush

func (c *Conn) PopPush(src, dst string, timeout time.Duration) (string, error)

PopPush executes the blocking BRPOPLPUSH command

func (*Conn) PopRight

func (c *Conn) PopRight(timeout time.Duration, key string, keys ...string) (k, v string, err error)

PopRight executes the blocking BRPOP command

func (*Conn) Quit

func (c *Conn) Quit() error

Quit closes the connection issuing a QUIT command

func (*Conn) Read

func (c *Conn) Read(p []byte) (n int, err error)

func (*Conn) Select

func (c *Conn) Select(db int64)

Select will select db on next Do

func (*Conn) Write

func (c *Conn) Write(p []byte) (n int, err error)

type ConnOptions

type ConnOptions struct {
	ReadBufferSize int
	ReadTimeout    time.Duration
	WriteTimeout   time.Duration
	WriteOnly      bool
}

ConnOptions holds connection options

type Err

type Err string

Err is a constant value error

func (Err) Error

func (e Err) Error() string

func (Err) String

func (e Err) String() string

type Migrate

type Migrate struct {
	Host    string
	Port    string
	DB      int64
	Timeout time.Duration
	Copy    bool
	Replace bool
}

Migrate options

type Pipeline

type Pipeline struct {
	resp.Buffer
	// contains filtered or unexported fields
}

Pipeline is a command buffer

func BlankPipeline

func BlankPipeline(db int64) (p *Pipeline)

BlankPipeline gets a blank pipeline from the pool

func (*Pipeline) Append

func (p *Pipeline) Append(key string, value resp.Arg)

func (*Pipeline) Auth

func (p *Pipeline) Auth(password string)

Auth authenticates to the server

func (*Pipeline) BGRewriteAOF

func (p *Pipeline) BGRewriteAOF()

func (*Pipeline) BGSave

func (p *Pipeline) BGSave()

func (*Pipeline) BLPop

func (p *Pipeline) BLPop(timeout time.Duration, keys ...string)

func (*Pipeline) BRPop

func (p *Pipeline) BRPop(timeout time.Duration, keys ...string)

func (*Pipeline) BRPopLPush

func (p *Pipeline) BRPopLPush(src, dest string, timeout time.Duration)

func (*Pipeline) BitAND

func (p *Pipeline) BitAND(dest string, src ...string)

func (*Pipeline) BitCount

func (p *Pipeline) BitCount(key string, start, end int64)

func (*Pipeline) BitNOT

func (p *Pipeline) BitNOT(dest, src string)

func (*Pipeline) BitOR

func (p *Pipeline) BitOR(dest string, src ...string)

func (*Pipeline) BitPos

func (p *Pipeline) BitPos(key string, bit uint, startEnd ...int64)

func (*Pipeline) BitXOR

func (p *Pipeline) BitXOR(dest string, src ...string)

func (*Pipeline) Command

func (p *Pipeline) Command(cmd string, numArgs int)

Command starts a new command with n number of args

func (*Pipeline) Decr

func (p *Pipeline) Decr(key string)

func (*Pipeline) DecrBy

func (p *Pipeline) DecrBy(key string, d int64)

func (*Pipeline) Del

func (p *Pipeline) Del(keys ...string)

Del deletes a key

func (*Pipeline) Discard

func (p *Pipeline) Discard()

Discard discards all commands issued after MULTI

func (*Pipeline) Dump

func (p *Pipeline) Dump(key string)

Dump returns a serialized version of the value stored at key

func (*Pipeline) Echo

func (p *Pipeline) Echo(message string)

Echo exchos the given string

func (*Pipeline) Eval

func (p *Pipeline) Eval(script string, keysAndArgs ...resp.Arg)

Eval executes a Lua script server side

func (*Pipeline) EvalSHA

func (p *Pipeline) EvalSHA(sha1 string, keysAndArgs ...resp.Arg)

EvalSHA executes a cached Lua script server side

func (*Pipeline) Exec

func (p *Pipeline) Exec()

Exec executes all commands issued after MULTI

func (*Pipeline) Exists

func (p *Pipeline) Exists(keys ...string)

Exists determines if a key exists

func (*Pipeline) Expire

func (p *Pipeline) Expire(key string, ttl time.Duration)

Expire sets a key's time to live

func (*Pipeline) ExpireAt

func (p *Pipeline) ExpireAt(key string, tm time.Time)

ExpireAt sets the expiration time for a key as a UNIX timestamp

func (*Pipeline) FlushDB

func (p *Pipeline) FlushDB()

func (*Pipeline) Get

func (p *Pipeline) Get(key string)

func (*Pipeline) GetBit

func (p *Pipeline) GetBit(key string, offset int64)

func (*Pipeline) GetRange

func (p *Pipeline) GetRange(key string, start, end int64)

func (*Pipeline) GetSet

func (p *Pipeline) GetSet(key string, value resp.Arg)

func (*Pipeline) HDel

func (p *Pipeline) HDel(key string, fields ...string)

HDel deletes one or more hash fields

func (*Pipeline) HExists

func (p *Pipeline) HExists(key string, field string)

HExists determines if a hash field exists

func (*Pipeline) HGet

func (p *Pipeline) HGet(key, field string)

HGet gets the value of a hash field

func (*Pipeline) HGetAll

func (p *Pipeline) HGetAll(key string)

HGetAll gets all the fields and values in a hash

func (*Pipeline) HIncrBy

func (p *Pipeline) HIncrBy(key, field string, n int64)

HIncrBy increments the integer value of a hash field by the given number

func (*Pipeline) HIncrByFloat

func (p *Pipeline) HIncrByFloat(key, field string, f float64)

HIncrByFloat increments the float value of a hash field by the given amount

func (*Pipeline) HKeys

func (p *Pipeline) HKeys(key string)

HKeys gets all the fields in a hash

func (*Pipeline) HLen

func (p *Pipeline) HLen(key string)

HLen gets the number of fields in a hash

func (*Pipeline) HMGet

func (p *Pipeline) HMGet(key string, fields ...string)

HMGet gets the values of all the the given hash fields

func (*Pipeline) HMSet

func (p *Pipeline) HMSet(key string, values ...resp.KV)

HMSet sets multiple hash fields to multiple values

func (*Pipeline) HScan

func (p *Pipeline) HScan(key string, cur int64, match string, count int64)

HScan incrementally iterates hash fields and associated values

func (*Pipeline) HSet

func (p *Pipeline) HSet(key, field string, value resp.Arg)

HSet sets the value of a hash field

func (*Pipeline) HSetNX

func (p *Pipeline) HSetNX(key, field string, value resp.Arg)

HSetNX sets the value of a hash field, only if the field does not exist

func (*Pipeline) HStrLen

func (p *Pipeline) HStrLen(key, field string)

HStrLen gets the length of the value of a hash field

func (*Pipeline) HVals

func (p *Pipeline) HVals(key string)

HVals get all the values in a hash

func (*Pipeline) Incr

func (p *Pipeline) Incr(key string)

func (*Pipeline) IncrBy

func (p *Pipeline) IncrBy(key string, d int64)

func (*Pipeline) IncrByFloat

func (p *Pipeline) IncrByFloat(key string, f float64)

func (*Pipeline) Keys

func (p *Pipeline) Keys(pattern string)

Keys finds all keys matching the given pattern

func (*Pipeline) LIndex

func (p *Pipeline) LIndex(key string, index int64)

func (*Pipeline) LInsertAfter

func (p *Pipeline) LInsertAfter(key string, pivot int64, value resp.Arg)

func (*Pipeline) LInsertBefore

func (p *Pipeline) LInsertBefore(key string, pivot int64, value resp.Arg)

func (*Pipeline) LLen

func (p *Pipeline) LLen(key string)

func (*Pipeline) LPop

func (p *Pipeline) LPop(key string)

func (*Pipeline) LPush

func (p *Pipeline) LPush(key string)

func (*Pipeline) LPushX

func (p *Pipeline) LPushX(key string)

func (*Pipeline) LRange

func (p *Pipeline) LRange(key string, start, stop int64)

func (*Pipeline) LRem

func (p *Pipeline) LRem(key string, count int64, value resp.Arg)

func (*Pipeline) LSet

func (p *Pipeline) LSet(key string, index int64, value resp.Arg)

func (*Pipeline) LTrim

func (p *Pipeline) LTrim(key string, start, stop int64)

func (*Pipeline) Len

func (p *Pipeline) Len() int

Len returns the number of commands in a pipeline

func (*Pipeline) MGet

func (p *Pipeline) MGet(keys ...string)

func (*Pipeline) MSet

func (p *Pipeline) MSet(pairs ...resp.KV)

func (*Pipeline) MSetNX

func (p *Pipeline) MSetNX(pairs ...resp.KV)

func (*Pipeline) Migrate

func (p *Pipeline) Migrate(m Migrate, keys ...string)

Migrate atomically transfers a key from a redis instance to another one

func (*Pipeline) Move

func (p *Pipeline) Move(key string, db int64)

Move moves a key to another database

func (*Pipeline) Multi

func (p *Pipeline) Multi()

Multi marks the start of a transaction block

func (*Pipeline) PFAdd

func (p *Pipeline) PFAdd(key string, elements ...string)

PFAdd adds the specified elements to the specified HyperLogLog

func (*Pipeline) PFCount

func (p *Pipeline) PFCount(keys ...string)

PFCount returns the approximate cardinality of the set

func (*Pipeline) PFMerge

func (p *Pipeline) PFMerge(dest string, src ...string)

PFMerge merges different HyperLoglLogs into a single one

func (*Pipeline) PTTL

func (p *Pipeline) PTTL(key string)

PTTL gets the time to live for a key in milliseconds

func (*Pipeline) Persist

func (p *Pipeline) Persist(key string)

Persist removes the expiration from a key

func (*Pipeline) Ping

func (p *Pipeline) Ping(message string)

Ping pings the server

func (*Pipeline) Quit

func (p *Pipeline) Quit()

Quit closes the connection

func (*Pipeline) RPop

func (p *Pipeline) RPop(key string)

func (*Pipeline) RPopLPush

func (p *Pipeline) RPopLPush(src, dest string)

func (*Pipeline) RPush

func (p *Pipeline) RPush(key string, values ...resp.Arg)

func (*Pipeline) RPushX

func (p *Pipeline) RPushX(key string, value resp.Arg)

func (*Pipeline) RandomKey

func (p *Pipeline) RandomKey()

RandomKey returns a random key from the keyspace

func (*Pipeline) Rename

func (p *Pipeline) Rename(key, newkey string)

Rename renames a key

func (*Pipeline) RenameNX

func (p *Pipeline) RenameNX(key, newkey string)

RenameNX renames a key only if the new key does not exist

func (*Pipeline) Reset

func (p *Pipeline) Reset()

Reset resets a pipeline

func (*Pipeline) Restore

func (p *Pipeline) Restore(key string, ttl time.Duration, data []byte, replace bool, idletime int64, frequency int64)

Restore creates a key using the provided serialized value, previously obtained using DUMP

func (*Pipeline) SAdd

func (p *Pipeline) SAdd(key string, members ...resp.Arg)

func (*Pipeline) SCard

func (p *Pipeline) SCard(key string)

func (*Pipeline) SDiff

func (p *Pipeline) SDiff(keys ...string)

func (*Pipeline) SDiffStore

func (p *Pipeline) SDiffStore(dest string, keys ...string)

func (*Pipeline) SInter

func (p *Pipeline) SInter(keys ...string)

func (*Pipeline) SInterStore

func (p *Pipeline) SInterStore(dest string, keys ...string)

func (*Pipeline) SIsMember

func (p *Pipeline) SIsMember(key, member string)

func (*Pipeline) SMembers

func (p *Pipeline) SMembers(key string)

func (*Pipeline) SMove

func (p *Pipeline) SMove(src, dest, member string)

func (*Pipeline) SPop

func (p *Pipeline) SPop(key string, count int64)

func (*Pipeline) SRandMember

func (p *Pipeline) SRandMember(key string, count int64)

func (*Pipeline) SRem

func (p *Pipeline) SRem(key string, members ...resp.Arg)

func (*Pipeline) SScan

func (p *Pipeline) SScan(key string, cur int64, match string, count int64)

func (*Pipeline) SUnion

func (p *Pipeline) SUnion(keys ...string)

func (*Pipeline) SUnionStore

func (p *Pipeline) SUnionStore(dest string, keys ...string)

func (*Pipeline) Scan

func (p *Pipeline) Scan(cur int64, match string, count int64)

Scan incrementally iterates the keyspace

func (*Pipeline) ScriptDebug

func (p *Pipeline) ScriptDebug(debug bool)

ScriptDebug sets the debug mode for executed scripts to YES/NO

func (*Pipeline) ScriptDebugSync

func (p *Pipeline) ScriptDebugSync()

ScriptDebugSync sets the debug mode for executed scripts to SYNC

func (*Pipeline) ScriptExists

func (p *Pipeline) ScriptExists(sha1 ...string)

ScriptExists checks existence of scripts in the script cache

func (*Pipeline) ScriptFlush

func (p *Pipeline) ScriptFlush()

ScriptFlush removes all the scripts from the script cache

func (*Pipeline) ScriptKill

func (p *Pipeline) ScriptKill()

ScriptKill kills the script currently in execution

func (*Pipeline) ScriptLoad

func (p *Pipeline) ScriptLoad(script string)

ScriptLoad loads the specified Lua script into the script cache

func (*Pipeline) Select

func (p *Pipeline) Select(db int64)

Select changes the selected database for the current connection

func (*Pipeline) Set

func (p *Pipeline) Set(key string, value resp.Arg, ttl time.Duration)

func (*Pipeline) SetNX

func (p *Pipeline) SetNX(key string, value resp.Arg, ttl time.Duration)

func (*Pipeline) SetRange

func (p *Pipeline) SetRange(key string, offset int64, value resp.Arg)

func (*Pipeline) SetXX

func (p *Pipeline) SetXX(key string, value resp.Arg, ttl time.Duration)

func (*Pipeline) Size

func (p *Pipeline) Size() int

Size returns the size of the pipeline in bytes

func (*Pipeline) Sort

func (p *Pipeline) Sort(key string, options Sort)

Sort sorts the elements in a list, set or sorted set

func (*Pipeline) StrLen

func (p *Pipeline) StrLen(key string)

func (*Pipeline) SwapDB

func (p *Pipeline) SwapDB(i, j int64)

SwapDB swaps two Redis databases

func (*Pipeline) TTL

func (p *Pipeline) TTL(key string)

TTL gets the time to live for a key in seconds

func (*Pipeline) Touch

func (p *Pipeline) Touch(keys ...string)

Touch alters the last access time of a key

func (*Pipeline) Type

func (p *Pipeline) Type(key string)

Type determines the type stored at key

func (p *Pipeline) Unlink(keys ...string)

Unlink deletes a key asyncronously in another thread.

func (*Pipeline) Unwatch

func (p *Pipeline) Unwatch()

Unwatch forgets about all watched keys

func (*Pipeline) Wait

func (p *Pipeline) Wait(replicas int64, timeout time.Duration)

Wait waits for the synchronous replication of all the write commands sent in the context of the current connection

func (*Pipeline) Watch

func (p *Pipeline) Watch(keys ...string)

Watch watches the given keys to determine execution of the MULTI/EXEC block

func (*Pipeline) ZAdd

func (p *Pipeline) ZAdd(key string, add SetMode, changed bool, members ...ZMember)

ZAdd adds score/value pairs to a sorted set

func (*Pipeline) ZCard

func (p *Pipeline) ZCard(key string)

ZCard gets the number of members in a sorted set

func (*Pipeline) ZCount

func (p *Pipeline) ZCount(key string, min, max float64)

ZCount counts the number of members in a sorted set with scores within the given values

func (*Pipeline) ZIncrBy

func (p *Pipeline) ZIncrBy(key string, inc float64, member string)

ZIncrBy increments the score of a member in a sorted set

func (*Pipeline) ZIncrByNX

func (p *Pipeline) ZIncrByNX(key string, inc float64, member string)

ZIncrByNX increments the score of a member in a sorted set, only if the member does not exist in the set

func (*Pipeline) ZIncrByXX

func (p *Pipeline) ZIncrByXX(key string, inc float64, member string)

ZIncrByXX increments the score of a member in a sorted set, only if the member already exists in the set

func (*Pipeline) ZInterStore

func (p *Pipeline) ZInterStore(dest string, keysAndWeights ...resp.Arg)

ZInterStore intersects multiple sorted sets and stores the resulting sorted set in a new key

func (*Pipeline) ZLexCount

func (p *Pipeline) ZLexCount(key, min, max string)

ZLexCount counts the number of members in a sorted set between a given lexicographical range

func (*Pipeline) ZPopMax

func (p *Pipeline) ZPopMax(key string, count int64)

ZPopMax removes and returns members with the highest scores in a sorted set

func (*Pipeline) ZPopMin

func (p *Pipeline) ZPopMin(key string, count int64)

ZPopMin removes and returns members with the lowest scores in a sorted set

func (*Pipeline) ZRange

func (p *Pipeline) ZRange(key string, start, stop int64, scores bool)

ZRange returns a range of members in a sorted set, by index

func (*Pipeline) ZRangeByLex

func (p *Pipeline) ZRangeByLex(key, min, max string, offset, count int64)

ZRangeByLex returns a range of members in a sorted set, by lexicographical range

func (*Pipeline) ZRangeByScore

func (p *Pipeline) ZRangeByScore(key string, min, max float64, scores bool, offset, count int64)

ZRangeByScore returns a range of members in a sorted set, by score

func (*Pipeline) ZRank

func (p *Pipeline) ZRank(key, member string)

ZRank determines the index of a member in a sorted set

func (*Pipeline) ZRem

func (p *Pipeline) ZRem(key string, members ...resp.Arg)

ZRem removes one or more members from a sorted set

func (*Pipeline) ZRemRangeByLex

func (p *Pipeline) ZRemRangeByLex(key, min, max string)

ZRemRangeByLex removes a range of members in a sorted set, between the given lexicographical range

func (*Pipeline) ZRemRangeByRank

func (p *Pipeline) ZRemRangeByRank(key string, start, stop int64)

ZRemRangeByRank removes a range of members in a sorted set, within the given indexes

func (*Pipeline) ZRemRangeByScore

func (p *Pipeline) ZRemRangeByScore(key string, min, max float64)

ZRemRangeByScore removes a range of members in a sorted set, within the given scores

func (*Pipeline) ZRevRank

func (p *Pipeline) ZRevRank(key, member string)

ZRevRank determines the index of a member in a sorted set, with scores ordered from high to low

func (*Pipeline) ZScan

func (p *Pipeline) ZScan(key string, cur int64, match string, count int64)

ZScan incrementally iterates sorted set's elements and associated scores

func (*Pipeline) ZScore

func (p *Pipeline) ZScore(key, member string)

ZScore gets the score associated with the given member in a sorted set

func (*Pipeline) ZUnionStore

func (p *Pipeline) ZUnionStore(dest string, keysAndWeights ...resp.Arg)

ZUnionStore adds multiple sorted sets and stores the resulting sorted set in a new key

type Pool

type Pool struct {
	ReadBufferSize    int
	ReadTimeout       time.Duration
	WriteTimeout      time.Duration
	WaitTimeout       time.Duration
	Address           string
	MaxConnections    int
	MaxIdleTime       time.Duration
	MaxConnectionAge  time.Duration
	CheckIdleInterval time.Duration
	DB                int
	Dial              func(address string, timeout time.Duration) (net.Conn, error)
	// contains filtered or unexported fields
}

Pool is a pool of redis connections

func (*Pool) Close

func (pool *Pool) Close() error

Close closes a pool

func (*Pool) Deadline

func (pool *Pool) Deadline() time.Time

func (*Pool) Do

func (pool *Pool) Do(p *Pipeline, r *resp.Reply) error

Do executes a RESP pipeline

func (*Pool) Get

func (pool *Pool) Get() (*Conn, error)

Get gets a connection from the pool

func (*Pool) Idle

func (pool *Pool) Idle() int

Idle returns the number of idle connections

func (Pool) Lock

func (Pool) Lock()

func (*Pool) Open

func (pool *Pool) Open() int

Open returns the number of open connections

func (*Pool) ParseURL

func (pool *Pool) ParseURL(rawurl string) (err error)

ParseURL parses a URL to PoolOptions

func (*Pool) Pipeline

func (pool *Pool) Pipeline() *Pipeline

Pipeline gets a blank pipeline from the pool setting the correct DB

func (*Pool) Put

func (pool *Pool) Put(c *Conn)

Put releases a connection to the pool

func (*Pool) Stats

func (pool *Pool) Stats() PoolStats

Stats returns current pool statistics

func (Pool) Unlock

func (Pool) Unlock()

type PoolStats

type PoolStats struct {
	Hits, Misses, Timeouts int64
}

PoolStats counts pool statistics

type ScanIterator

type ScanIterator struct {
	// contains filtered or unexported fields
}

ScanIterator is an iterator for Redis scan commands

func HScan

func HScan(key, match string, count int64) *ScanIterator

HScan starts a hash object scan iterator

func SScan

func SScan(key, match string, count int64) *ScanIterator

SScan starts a set scan iterator

func Scan

func Scan(match string, count int64) *ScanIterator

Scan starts a key scan iterator

func ZScan

func ZScan(key, match string, count int64) *ScanIterator

ZScan starts a sorted set scan iterator

func (*ScanIterator) Close

func (s *ScanIterator) Close() error

Close closes an iterator

func (*ScanIterator) Each

func (s *ScanIterator) Each(conn *Conn, scan func(k []byte, v resp.Value) error) error

Each executes a callback for each result in the iterator

func (*ScanIterator) Err

func (s *ScanIterator) Err() error

Err returns the scan error if any

func (*ScanIterator) Next

func (s *ScanIterator) Next(conn *Conn) resp.Value

Next gets the next value in an iterator

type SetMode

type SetMode uint

SetMode determines the update mode for SET command

const (
	NX SetMode
	XX
)

SetMode enum

type Sort

type Sort struct {
	By            string
	Offset, Count int64
	Get           []string
	Alpha         bool
	Desc          bool
	Store         string
}

Sort options for SORT command

type TimeoutError

type TimeoutError struct{}

TimeoutError is an error indicating blocking command timeout

func (*TimeoutError) Error

func (*TimeoutError) Error() string

func (*TimeoutError) IsTimeout

func (*TimeoutError) IsTimeout() bool

IsTimeout implements IsTimeouter interface

type ZMember

type ZMember struct {
	Score  float64
	Member string
}

ZMember is a score/value pair

func Z

func Z(score float64, member string) ZMember

Z creates a new ZMember

Directories

Path Synopsis
Package resp provides RESP protocol serialization and deserialization
Package resp provides RESP protocol serialization and deserialization

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL