https://github.com/shubhamharitash/inmemorykeyvaluestorage-redis
InMemoryKeyValueStorage-Redis
https://github.com/shubhamharitash/inmemorykeyvaluestorage-redis
commandlineapplication lld machine-coding redis redis-cache redis-lld redis-machine-coding sde sde2 sde3 system-design system-design-interview system-design-project
Last synced: about 2 months ago
JSON representation
InMemoryKeyValueStorage-Redis
- Host: GitHub
- URL: https://github.com/shubhamharitash/inmemorykeyvaluestorage-redis
- Owner: shubhamharitash
- Created: 2024-05-19T18:14:30.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2024-05-24T10:42:41.000Z (11 months ago)
- Last Synced: 2025-01-16T00:55:34.563Z (3 months ago)
- Topics: commandlineapplication, lld, machine-coding, redis, redis-cache, redis-lld, redis-machine-coding, sde, sde2, sde3, system-design, system-design-interview, system-design-project
- Language: Java
- Homepage: https://youtu.be/SGtd--4WdLA
- Size: 17.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Design an In-Memory Key-Value Store | Machine Coding Round Questions (SDE II/III)
Problem Statement : https://workat.tech/machine-coding/practice/design-key-value-store-6gz6cq124k65
Video Solution : https://youtu.be/SGtd--4WdLA
Problem Statement
Design an In-Memory Key-Value Store like Redis.Requirements
The key-value store will be in-memory and does not require access to the file system.
The key will always be a string.
The value would be an object/map. The object would have attributes and corresponding values.
Example => "sde_bootcamp": { "title": "SDE-Bootcamp", "price": 30000.00, "enrolled": false, "estimated_time": 30 }
Each attribute key would be a string and the attribute values could be string, integer, double or boolean.
The key-value store should be thread-safe.
The Key-Value store should expose the following functions:
get(String key) => Should return the value (object with attributes and their values). Return null if key not present
search(String attributeKey, String attributeValue) => Returns a list of keys that have the given attribute key, value pair.
put(String key, List> listOfAttributePairs) => Adds the key and the attributes to the key-value store. If the key already exists then the value is replaced.
delete(String key) => Deletes the key, value pair from the store.
keys() => Return a list of all the keys
The value object should override the toString method to print the object as a comma-separated list of key-value pairs for the attributes.
Example: attribute1: attribute_value_1, attribute2: attribute_value_2, attribute3: attribute_value_3
The data type of an attribute should get fixed after its first occurrence. Example: Once we encounter an attribute age with an integer value then any entry with an age attribute having a non-integer value should result in an exception.
Nothing should be printed inside any of these methods. All scanning and printing should happen in the Driver/Main class only. Exception Handling should also happen in the Driver/Main class.
Input/Output Format
The code should strictly follow the input/output format and will be tested with provided test cases.Input Format
Multiple lines with each line containing a command.
Possible commands:
get
put ....
delete
search
keys
exit
Stop taking the input when you encounter the word exit.Assume that attribute keys and values would not have space in between.
Output Format
Print output based on the specific commands as mentioned below.
get
Comma and space-separated attributes. Example:attribute1: attribute_value_1, attribute2: attribute_value_2, attribute3: attribute_value_3
Print "No entry found for " if get returns null.put
Do not print anything. Print "Data Type Error" if attribute has data type other than previous set.delete
Do not print anything.search
Comma-separated keys. Example:key1,key2,key3,key4
Print in sorted orderkeys
Comma-separated keys. Example:key1,key2,key3,key4
Print in sorted orderExample
Sample Input
put sde_bootcamp title SDE-Bootcamp price 30000.00 enrolled false estimated_time 30
get sde_bootcamp
keys
put sde_kickstart title SDE-Kickstart price 4000 enrolled true estimated_time 8
get sde_kickstart
keys
put sde_kickstart title SDE-Kickstart price 4000.00 enrolled true estimated_time 8
get sde_kickstart
keys
delete sde_bootcamp
get sde_bootcamp
keys
put sde_bootcamp title SDE-Bootcamp price 30000.00 enrolled true estimated_time 30
search price 30000.00
search enrolled trueExpected Output
title: SDE-Bootcamp, price: 30000.00, enrolled: false, estimated_time: 30
sde_bootcamp
Data Type Error
No entry found for sde_kickstart
sde_bootcamp
title: SDE-Kickstart, price: 4000.00, enrolled: true, estimated_time: 8
sde_bootcamp,sde_kickstart
No entry found for sde_bootcamp
sde_kickstart
sde_bootcamp
sde_bootcamp,sde_kickstartExpectations
Make sure that you have a working and demonstrable code
Make sure that the code is functionally correct
Code should be modular and readable
Separation of concern should be addressed
Please do not write everything in a single file (if not coding in C/C++)
Code should easily accommodate new requirements and minimal changes
There should be a main method from where the code could be easily testable
[Optional] Write unit tests, if possible
No need to create a GUI